Коли ми використовуємо 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
-> Реф . Але, можливо, не працювали на деяких контейнерах!