Maison >Opération et maintenance >Docker >Docker ne quitte jamais le conteneur
Pour que le conteneur Docker continue de fonctionner et ne se ferme pas, il existe de nombreuses façons d'y parvenir. Dans cet article, nous aborderons certaines méthodes couramment utilisées ainsi que leurs avantages et inconvénients.
Docker fournit une option --restart
qui peut redémarrer automatiquement le conteneur lorsque celui-ci se ferme anormalement . Il existe trois valeurs optionnelles, à savoir no
, on-failure
et always
, qui correspondent respectivement à aucun redémarrage, redémarrage sur sortie anormale et toujours. Redémarrage. Exemple spécifique : --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.serviceL'avantage d'utiliser l'option
--restart
est qu'elle est simple et facile à utiliser. Il vous suffit d'ajouter une option à la ligne de commande. Mais si une erreur se produit dans le conteneur, celui-ci continuera à redémarrer jusqu'à ce que le conteneur soit arrêté manuellement. Cela peut entraîner une instabilité du code et une perte de données. Méthode 2 : Utiliser Docker ComposeDocker Compose est un outil qui peut définir et exécuter plusieurs conteneurs Docker. Il peut décrire la relation entre les conteneurs et les paramètres de démarrage via un fichier yml. Ajoutez la configuration suivante dans le fichier docker-compose.yml
: #🎜🎜#rrreee#🎜🎜# Ensuite, vous pouvez utiliser la commande docker-compose
pour démarrer le conteneur : L'option #🎜🎜#rrreee#🎜🎜#restart: always
indique à Docker de redémarrer automatiquement le conteneur lorsque celui-ci se ferme anormalement. L'avantage de cette méthode est qu'elle peut gérer plusieurs conteneurs, ce qui est pratique et rapide, mais il reste le problème du redémarrage constant des conteneurs. #🎜🎜##🎜🎜#Méthode 3 : Utiliser un processus démon #🎜🎜##🎜🎜#L'utilisation d'un processus démon est un moyen fiable d'empêcher le conteneur Docker de se fermer. Démarrez un processus démon dans le conteneur, puis laissez le conteneur Docker s'exécuter sous la supervision du processus démon. S'il y a un problème avec le conteneur, le démon redémarrera le conteneur. #🎜🎜##🎜🎜#Ce qui suit est un exemple d'utilisation du démon supervisor
pour démarrer un service Node.js : #🎜🎜#supervisord.conf
et ajoutez le contenu suivant : systemd
pour surveiller les conteneurs Docker : #🎜🎜#mydocker. service
, le contenu du fichier est le suivant : myapp
. Lorsqu'un problème survient avec le conteneur, systemd
redémarrera automatiquement le conteneur. Utilisez la commande systemctl
pour activer ce service : #🎜🎜#rrreee#🎜🎜#L'avantage d'utiliser la surveillance externe est qu'elle est plus flexible et peut utiliser divers systèmes de surveillance tiers, mais cela nécessite travaux supplémentaires de configuration et de maintenance. #🎜🎜##🎜🎜# Dans l'ensemble, il existe de nombreuses façons de faire fonctionner les conteneurs Docker pendant une longue période, chacune avec ses propres avantages et inconvénients. Le choix spécifique doit être basé sur les besoins réels. Lors du démarrage d'un conteneur, vous devez également tenir compte de la stabilité et de la sécurité de son fonctionnement et utiliser des outils d'automatisation appropriés pour réduire les opérations manuelles. #🎜🎜#Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!