要保持 Docker 容器一直運作並不退出,有多種方法可以實現。在本文中,我們將介紹一些常用的方法以及它們的優缺點。
Docker 提供了一個選項 --restart
,可以在容器異常退出時自動重新啟動容器。有三種可選值,分別是 no
、on-failure
和 always
,分別對應不重啟、非正常退出時重新啟動和總是重新啟動。具體範例:
docker run --restart=always IMAGE_NAME
使用 --restart
選項的優點是簡單易用,只需要在命令列中新增一個選項即可。但如果容器出現了錯誤,它也會一直重啟,直到手動停止容器。這可能會導致代碼的不穩定性和資料的遺失。
Docker Compose 是一個工具,可以定義和運行多個 Docker 容器。它可以透過一個 yml 檔案來描述容器之間的關係和啟動參數。在docker-compose.yml
檔案中加入下面的設定:
version: '3' services: app: build: . restart: always
然後可以使用docker-compose
指令啟動容器:
docker-compose up -d
restart: always
選項告訴Docker 在容器異常退出時自動重新啟動容器。這種方法的優點是可以管理多個容器,方便快捷,但是依然存在容器一直重啟的問題。
使用守護程式是保持 Docker 容器不退出的一種可靠的方法。在容器中啟動一個守護進程,然後讓 Docker 容器在守護程序的監控下運作。如果容器出現問題,守護程式會重新啟動容器。
以下是一個例子,使用supervisor
守護程式啟動一個Node.js 服務:
npm install -g supervisor
supervisord.conf
文件,新增以下內容:[supervisord] nodaemon=true [program:app] command=supervisor app.js directory=/app autostart=true autorestart=true user=root
RUN apt-get update && apt-get install -y supervisor COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
生成鏡像並啟動容器:
docker build -t IMAGE_NAME . docker run -d IMAGE_NAME
使用守護程序的優點是可以靈活地控制容器的行為,但是需要一些額外的配置工作,並且需要啟動一個守護進程,佔用一些系統資源。
使用外部監控系統來監控 Docker 容器並在異常時重新啟動容器,可以更靈活地控制容器的行為。當容器異常時,監控系統可以採取一些操作,例如發出警報、記錄日誌、重新啟動容器等。
例如可以使用systemd
來監控Docker 容器:
mydocker.service
,文件內容如下:[Unit] Description=My Docker Container [Service] ExecStart=/usr/bin/docker start -a myapp Restart=always RestartSec=10s ExecStop=/usr/bin/docker stop -t 2 myapp [Install] WantedBy=default.target
這個檔案定義了一個名為myapp
的容器。當容器出現問題時,systemd
會自動重新啟動容器。使用 systemctl
指令啟用這個服務:
sudo systemctl daemon-reload sudo systemctl enable mydocker.service sudo systemctl start mydocker.service
使用外部監控的優點是更靈活,可以使用各種第三方監控系統,但需要額外的設定和維護工作。
整體來說,保持 Docker 容器長時間運作的方法有很多種,每一種都有其優缺點。具體應根據實際需求來選擇。在啟動容器時,也應該考慮容器運作的穩定性和安全性,同時使用合適的自動化工具來減少手動操作。
以上是docker 永不退出 容器的詳細內容。更多資訊請關注PHP中文網其他相關文章!