問題描述
當我們使用 Docker Compose 啟動應用程序之后,如果主機發生重啟,應用容器無法自動啟動。
我們可以使用 Docker Compose 的重啟策略,但是也存在一些問題。
該筆記將記錄:1)自動啟動服務的解決方案、2)及其常見問題和解決方法
方法一、通過 Docker Restart Policy 方法
在 Docker 中,支持 --restart 選項,來控制容器自動啟動。在 Docker Compose 中,應該使用 restart 屬性:
version: "3.6" services: frontend: image: frontend:v1.0.0 depends_on: - backend restart: always backend: image: backend:v1.0.0 restart: always
注意事項:
1)Docker 並不知道這些服務的依賴關系及啟動順序,需要我們精心編排 docker-compose.yaml 文件;
2)Docker Compose 不支持 deploy:restart_policy 屬性,該屬性只能用於 a swarm with docker stack deploy 環境;
方法二、通過進程管理服務(推薦)
該方法本質上還是在執行 docker-compose 命令。
使用 systemd 管理
如下示例,可以根據需要進行設置:
# cat /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/app/ ExecStart=/usr/local/bin/docker-compose up -d ExecStop=/usr/local/bin/docker-compose down TimeoutStartSec=0 [Install] WantedBy=multi-user.target
參考文獻
WikiNotes/開機自動啟動應用容器
Start containers automatically | Docker Documentation
How to run docker-compose up -d at system start up? - Stack Overflow
Compose file version 3 reference | Docker Documentation