Коли ми використовуємо crontabабо застарілий /etc/rc.localфайл, нам потрібна затримка (наприклад sleep 10, залежно від машини), щоб переконатися, що доступні системні послуги. Зазвичай systemd(або upstart) використовується для управління, які служби починаються, коли система завантажується. Ви можете спробувати використовувати подібну конфігурацію для цього:
# /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
Або, якщо ви хочете запустити без -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
Змініть WorkingDirectoryпараметр за допомогою докерізованого контуру проекту. І дозвольте сервісу запускатися автоматично:
systemctl enable docker-compose-app
--restart alwaysабо--restart unless-stoppedв докер-compose.yml використанняrestart: always-> Реф . Але, можливо, не працювали на деяких контейнерах!