首頁  >  文章  >  運維  >  docker 永不退出 容器

docker 永不退出 容器

王林
王林原創
2023-05-16 20:35:362404瀏覽

要保持 Docker 容器一直運作並不退出,有多種方法可以實現。在本文中,我們將介紹一些常用的方法以及它們的優缺點。

方法一:使用 --restart 選項

Docker 提供了一個選項 --restart,可以在容器異常退出時自動重新啟動容器。有三種可選值,分別是 noon-failurealways,分別對應不重啟、非正常退出時重新啟動和總是重新啟動。具體範例:

docker run --restart=always IMAGE_NAME

使用 --restart 選項的優點是簡單易用,只需要在命令列中新增一個選項即可。但如果容器出現了錯誤,它也會一直重啟,直到手動停止容器。這可能會導致代碼的不穩定性和資料的遺失。

方法二:使用 Docker Compose

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 服務:

  1. 安裝supervisor:
npm install -g supervisor
  1. 建立supervisord.conf 文件,新增以下內容:
[supervisord]
nodaemon=true

[program:app]
command=supervisor app.js
directory=/app
autostart=true
autorestart=true
user=root
  1. 在Dockerfile 中新增以下設定:
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 容器:

  1. 建立一個systemd unit 文件,例如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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn