Maison >Opération et maintenance >Docker >Solution au problème selon lequel le conteneur Docker ne peut pas être démarré
Docker est une plate-forme de conteneurisation populaire largement utilisée pour le développement et le déploiement. Cependant, vous pouvez parfois rencontrer des échecs de démarrage lors de l'utilisation de conteneurs Docker. Cet article explorera certains problèmes courants et proposera des solutions.
Tout d'abord, nous devons vérifier l'état du conteneur. Utilisez la commande docker ps -a
pour afficher l'état de tous les conteneurs, y compris les conteneurs en cours d'exécution et non en cours d'exécution. Si l'état du conteneur est Exited
, cela signifie que le conteneur a arrêté de fonctionner. docker ps -a
可以查看所有容器的状态,包括运行中的和未运行的容器。如果容器状态为 Exited
,则说明容器已经停止运行。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8a9506b91d24 nginx "nginx -g 'daemon of…" 2 hours ago Exited (1) 2 hours ago nginx-container
当容器启动失败时,我们可以通过查看容器日志来获取更多详细信息。使用命令 docker logs CONTAINER_NAME/ID
可以查看容器的日志输出。如果此时容器已经关闭,可以使用参数 -f
持续查看日志。
$ docker logs nginx-container 2021/08/23 08:08:09 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use) ...
以上面的 nginx-container
为例,可以看到错误信息是 bind() to 0.0.0.0:80 failed (98: Address already in use)
,表明端口 80 已经被占用,因此容器无法启动。
前面的错误提示已经提到了端口占用问题,因此我们需要检查容器的端口映射是否正确。使用命令 docker port CONTAINER_NAME/ID
可以查看容器的端口映射情况。
$ docker port nginx-container 80/tcp -> 0.0.0.0:8080
上面的输出表明容器的 80 端口被映射到了宿主机的 8080 端口,因此我们需要检查宿主机的 8080 端口是否被占用。
有时候容器启动失败是由于内部服务无法正常启动。例如,数据库容器连接失败、应用程序自身的配置问题等等。在这种情况下,我们需要进入容器内部,手动运行服务并检查输出信息。
使用命令 docker exec -it CONTAINER_NAME/ID bash
$ docker exec -it nginx-container bash
docker logs CONTAINER_NAME/ID
pour afficher la sortie du journal du conteneur. Si le conteneur a été arrêté à ce moment-là, vous pouvez utiliser le paramètre -f
pour continuer à afficher le journal. $ docker stop nginx-container $ docker rm nginx-container
nginx-container
ci-dessus comme exemple, vous pouvez voir que le message d'erreur est bind() to 0.0.0.0:80 failed (98 : Adresse déjà utilisée) , indiquant que le port 80 est déjà occupé, le conteneur ne peut donc pas être démarré.
Vérifier le mappage des ports du conteneur
Le message d'erreur précédent a mentionné le problème d'occupation du port, nous devons donc vérifier si le mappage des ports du conteneur est correct. Utilisez la commandedocker port CONTAINER_NAME/ID
pour afficher le mappage de port du conteneur.
$ docker build -t my-nginx . $ docker run -d --name nginx-container -p 8080:80 my-nginxLe résultat ci-dessus montre que le port 80 du conteneur est mappé au port 8080 de l'hôte, nous devons donc vérifier si le port 8080 de l'hôte est occupé. 🎜
docker exec -it CONTAINER_NAME/ID bash
pour entrer dans le conteneur. 🎜rrreee🎜À l'intérieur du conteneur, exécutez le service qui doit être vérifié et affichez les informations de sortie. 🎜🎜🎜Reconstruire l'image🎜🎜🎜Si le conteneur ne peut pas être démarré et qu'aucune des méthodes ci-dessus ne vous aide, vous pouvez essayer de reconstruire le conteneur. Tout d’abord, nous devons arrêter et supprimer le conteneur d’origine. 🎜rrreee🎜Ensuite, reconstruisez l'image et exécutez le conteneur. 🎜rrreee🎜Voici quelques raisons et solutions courantes qui empêchent le démarrage des conteneurs Docker. Bien sûr, il existe d'autres raisons plus complexes. Il existe également de nombreux détails et options de configuration auxquels il faut prêter attention lors de l'utilisation de conteneurs Docker. J'espère que les lecteurs pourront maîtriser les compétences de base du développement de conteneurs. 🎜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!