Heim > Artikel > Betrieb und Instandhaltung > Docker verlässt den Container nie
Um den Docker-Container am Laufen zu halten und nicht zu beenden, gibt es viele Möglichkeiten. In diesem Artikel behandeln wir einige häufig verwendete Methoden und ihre Vor- und Nachteile.
Docker bietet eine Option --restart
, um den Container automatisch neu zu starten, wenn der Container abnormal beendet wird. Es gibt drei optionale Werte, nämlich no
, on-failure
und always
, die jeweils „kein Neustart“, „Neustart bei abnormalem Beenden“ und „immer“ entsprechen. Neustart. Konkretes Beispiel: --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.serviceDer Vorteil der Verwendung der Option
--restart
besteht darin, dass sie einfach und benutzerfreundlich ist. Sie müssen lediglich eine Option zur Befehlszeile hinzufügen. Wenn jedoch im Container ein Fehler auftritt, wird er so lange neu gestartet, bis der Container manuell gestoppt wird. Dies kann zu Codeinstabilität und Datenverlust führen. Methode 2: Docker Compose verwendenDocker Compose ist ein Tool, das mehrere Docker-Container definieren und ausführen kann. Es kann die Beziehung zwischen Containern und Startparametern über eine YML-Datei beschreiben. Fügen Sie die folgende Konfiguration in der Datei docker-compose.yml
hinzu: 🎜rrreee🎜Dann können Sie den Befehl docker-compose
verwenden, um den Container zu starten: 🎜rrreee🎜 restart: Always weist Docker an, den Container automatisch neu zu starten, wenn er abnormal beendet wird. Der Vorteil dieser Methode besteht darin, dass mehrere Container verwaltet werden können, was bequem und schnell ist. Es besteht jedoch immer noch das Problem, dass Container ständig neu gestartet werden. 🎜🎜Methode 3: Verwenden Sie einen Daemon-Prozess🎜🎜Die Verwendung eines Daemon-Prozesses ist eine zuverlässige Methode, um zu verhindern, dass der Docker-Container beendet wird. Starten Sie einen Daemon-Prozess im Container und lassen Sie dann den Docker-Container unter der Aufsicht des Daemon-Prozesses laufen. Wenn ein Problem mit dem Container auftritt, startet der Daemon den Container neu. 🎜🎜Das Folgende ist ein Beispiel für die Verwendung des <code>supervisor
-Daemons zum Starten eines Node.js-Dienstes: 🎜supervisord.conf
und fügen Sie den folgenden Inhalt hinzu:systemd
verwenden, um Docker-Container zu überwachen: 🎜mydocker.service
, mit Folgendem Inhalt: myapp
. Wenn ein Problem mit dem Container auftritt, startet systemd
den Container automatisch neu. Verwenden Sie den Befehl systemctl
, um diesen Dienst zu aktivieren: 🎜rrreee🎜Der Vorteil der Verwendung der externen Überwachung besteht darin, dass sie flexibler ist und verschiedene Überwachungssysteme von Drittanbietern verwenden kann, erfordert jedoch zusätzliche Konfigurations- und Wartungsarbeiten. 🎜🎜Generell gibt es viele Möglichkeiten, Docker-Container lange am Laufen zu halten, jede mit ihren eigenen Vor- und Nachteilen. Die konkrete Auswahl sollte auf den tatsächlichen Bedürfnissen basieren. Beim Starten eines Containers sollten Sie auch die Stabilität und Sicherheit des Containerbetriebs berücksichtigen und geeignete Automatisierungstools verwenden, um manuelle Vorgänge zu reduzieren. 🎜Das obige ist der detaillierte Inhalt vonDocker verlässt den Container nie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!