Cuando usamos crontab
o el /etc/rc.local
archivo obsoleto , 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 se inician cuando se inicia el sistema. Puede intentar usar una 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 -d
bandera:
# /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 WorkingDirectory
parámetro con la ruta de su proyecto acoplada. Y habilite el servicio para que se inicie automáticamente:
systemctl enable docker-compose-app
--restart always
o--restart unless-stopped
o en docker-compose.yml userestart: always
-> Ref . ¡Pero quizás no funcionó en algunos contenedores!