compose - docker hub
¿Cómo ejecutar docker-compose up-d al inicio del sistema? (6)
Como una adición a la respuesta del
user39544
, un tipo más de sintaxis para
crontab -e
:
@reboot sleep 60 && /usr/local/bin/docker-compose -f /path_to_your_project/docker-compose.yml up -d
Para permitir que los contenedores se inicien automáticamente en el punto de inicio, intenté agregar el comando:
cd directory_has_docker-compose.yml && docker-compose up -d
en /etc/rc.local.
pero luego de reiniciar la máquina, los contenedores no funcionan.
¿Cómo ejecutar
docker-compose up -d
al inicio del sistema?
Cuando usamos
crontab
o el archivo
/etc/rc.local
desuso, necesitamos un retraso (por ejemplo,
sleep 10
, dependiendo de la máquina) para asegurarnos de que los servicios del sistema estén disponibles.
Por lo general,
systemd
(o
upstart
) se usa para administrar qué servicios comienzan cuando se inicia el sistema.
Puede intentar usar la configuración similar para esto:
# /etc/systemd/system/docker-compose-app.service
[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
O, si quieres correr sin la bandera
-d
:
# /etc/systemd/system/docker-compose-app.service
[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service
[Service]
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
Restart=on-failure
StartLimitIntervalSec=60
StartLimitBurst=3
[Install]
WantedBy=multi-user.target
Cambie el parámetro
WorkingDirectory
con la ruta del proyecto dockerizado.
Y permita que el servicio se inicie automáticamente:
systemctl enable docker-compose-app
Debería poder agregar:
restart: always
a todos los servicios que desea reiniciar en el archivo docker-compose.yml
Intenté
restart: always
, funciona en algunos contenedores (como php-fpm), pero enfrenté el problema de que algunos contenedores (como nginx) todavía no se reinician después del reinicio.
Resuelve el problema.
crontab -e
@reboot (sleep 30s ; cd directory_has_dockercomposeyml ; /usr/local/bin/docker-compose up -d )&
Si su
docker.service
habilitado al iniciar el sistema
$ sudo systemctl enable docker
y sus servicios en su
docker-compose.yml
tiene
restart: always
todos los servicios se ejecutan cuando reinicia su sistema si ejecuta el siguiente comando solo una vez
docker-compose up -d
Utilice el reinicio: siempre en el docker componer archivo. Docker-compose up -d iniciará nuevamente el contenedor desde las imágenes. Use docker-compose start para iniciar los contenedores detenidos, nunca lanza nuevos contenedores a partir de imágenes.
nginx:
restart: always
image: nginx
ports:
- "80:80"
- "443:443" links:
- other_container:other_container
También puede escribir el código en el archivo acoplable para que se cree primero, si tiene la dependencia en otros contenedores.