Docker: le conteneur continue de redémarrer à nouveau

108

J'ai déployé aujourd'hui une instance de MediaWiki en utilisant l'image docker appcontainers / mediawiki, et j'ai maintenant un nouveau problème pour lequel je ne trouve aucun indice. Après avoir essayé de vous attacher au conteneur frontal de mediawiki en utilisant:

docker attach mediawiki_web_1

qui répond Terminatedsur ma configuration pour une raison que j'ignore, en essayant aussi:

docker exec -it mediawiki_web_1 bash

J'obtiens quelque chose qui ressemble à un message d'erreur:

Error response from daemon: Container 81c07e4a69519c785b12ce4512a8ec76a10231ecfb30522e714b0ae53a0c9c68 is restarting, wait until the container is running

Et il y a mon nouveau problème, car ce conteneur n'arrête jamais de redémarrer. Je peux voir que using docker ps -aqui renvoie toujours un STATUS de Restarting (127) x seconds ago.

Le fait est que je suis capable d'arrêter le conteneur (j'ai testé) mais le redémarrer semble le ramener dans sa boucle de redémarrage.

Une idée de ce qui pourrait être le problème ici? Le tout fonctionnait correctement jusqu'à ce que j'essaye de m'y attacher ...

Je suis triste :-(

Balessan
la source
J'ai eu du succès en supprimant complètement mon cache Docker entier, en utilisant forums.docker.com/t/how-to-delete-cache/5753/2 (j'ai également ajouté la balise -f à rmi). Ensuite, j'ai reconstruit mes conteneurs et ils ont fonctionné.
alberto56
Pour moi, il ne suffisait pas de supprimer les conteneurs et les images (comme décrit dans le lien @ alberto56), j'ai également dû supprimer le volume associé. Une fois que j'ai fait cela, je suis revenu aux affaires.
Katie Byers

Réponses:

172

La docker logscommande vous montrera la sortie qu'un conteneur génère lorsque vous ne l'exécutez pas de manière interactive. Cela inclura probablement le message d'erreur.

docker logs --tail 50 --follow --timestamps mediawiki_web_1

Vous pouvez également exécuter un nouveau conteneur au premier plan avec docker run -ti <your_wiki_image>pour voir ce que cela fait. Vous devrez peut-être mapper une configuration de votre docker-composeyml à la dockercommande.

Je suppose que l'attachement au processus de wiki multimédia a provoqué un crash qui a corrompu quelque chose dans vos données.

Mat
la source
Le résultat de la commande que vous avez fournie qui, je suppose, obtient les 50 derniers journaux liés au conteneur est le suivant 2016-05-26T16:38:27.362409489Z * Stopping web server apache2 * 2016-05-26T21:49:11.376549083Z Terminated 2016-05-26T21:49:11.688655642Z /bin/bash: /tmp/.runconfig.sh: No such file or directory:, vous avez donc raison, il y a quelque chose de corrompu dans les données car le runconfig.sh semble avoir disparu. J'essaierai d'exécuter à nouveau le conteneur depuis le premier plan comme vous l'avez conseillé. Juste besoin de trouver comment spécifier les 25 arguments appropriés ^^
Balessan
7
Merci, l'exécution d'un nouveau conteneur a fait le travail. Docker était censé faciliter mon déploiement mais pour l'instant c'est un gros échec :-) J'ai probablement besoin d'apprendre et d'essayer plus ...
Balessan
Je me tirais les cheveux en essayant de faire fonctionner MySQL. docker ps -am'a montré qu'il était coincé dans une boucle de démarrage et votre commande m'a montré pourquoi: des fichiers déjà dans le répertoire mysql qu'il ne pouvait pas supprimer. Tu m'as sauvé des heures de plus à m'arracher les cheveux. Merci!
Blizzardengle
32

Lorsque docker kill CONTAINER_IDne fonctionne pas et docker stop -t 1 CONTAINER_IDne fonctionne pas non plus, vous pouvez essayer de supprimer le conteneur:

docker container rm CONTAINER_ID

J'ai eu un problème similaire aujourd'hui où les conteneurs étaient dans une boucle de redémarrage continu.

Le problème dans mon cas était lié au fait que j'étais un mauvais ingénieur.

Quoi qu'il en soit, j'ai résolu le problème en supprimant le conteneur, en réparant mon code, puis en reconstruisant et en exécutant le conteneur.

J'espère que cela aidera quiconque sera coincé avec ce problème à l'avenir

Giannis Katsini
la source
4
J'avais mis du mauvais code dans mon application et dans mon fichier de composition de docker j'ai ajouté restart: alwaysce qui m'a laissé dans une boucle de docker essayant de démarrer une application cassée .. :(
Giannis Katsini
4

D'après l'expérience personnelle, il semble qu'il y ait un problème dans votre conteneur Docker qui ne lui permet pas de redémarrer. Ainsi, un processus dans le conteneur provoque le blocage du redémarrage ou un processus provoque le blocage du conteneur au démarrage.

Lorsque vous démarrez le conteneur, assurez-vous de le démarrer en détachant "-d" si vous souhaitez vous y attacher. (ex. "docker run -d mediawiki_web_1")

iam10k
la source
Je suppose que l'exécution du conteneur à l'aide de docker-compose l'a quand même détaché, non? Ou l'argument -d est manquant dans mon fichier de configuration. va vérifier cela.
Balessan
4

tl; dr Il redémarre avec un code d'état de 127, ce qui signifie qu'il manque un fichier / une bibliothèque dans votre conteneur. Le démarrage d'un nouveau conteneur pourrait bien le réparer.

Explication:

En ce qui concerne ma compréhension de Docker, voici ce qui se passe:

  1. Le conteneur tente de démarrer. Dans le processus, il essaie d'accéder à un fichier / bibliothèque qui n'existe pas.
  2. Il sort avec un code d'état de 127, qui est expliqué dans cette réponse .
  3. Normalement, c'est là que le conteneur aurait dû se terminer complètement, mais il redémarre.
  4. Il redémarre car la stratégie de redémarrage doit avoir été définie sur autre chose que no( la valeur par défaut ), (en utilisant soit l'indicateur de ligne de commande --restartou la docker-compose.ymlclé restart) lors du démarrage du conteneur.

Solution: quelque chose a peut-être corrompu votre conteneur. Le démarrage d'un nouveau contenant devrait idéalement faire le travail.

meshde
la source
2

Cela peut également être le cas si vous avez créé un systemdservice qui a:

[Service]
Restart=always
ExecStart=/usr/bin/docker container start -a my_container
ExecStop=/usr/bin/docker container stop -t 2 my_container
Stephen
la source
1

Dans mon cas, le conteneur nginx continuait à redémarrer, j'ai vérifié les journaux du conteneur nginx et j'ai appris que les fichiers .crt et .key d'un domaine non requis avaient des erreurs, j'ai donc supprimé les fichiers .conf respectifs, .crt et .key, puis redémarré nginx. Voilà, nginx fonctionne correctement sans redémarrer.

Lakshmi
la source
0

J'avais oublié Minikube en arrière-plan et c'est ce qui les a toujours redémarrés

nuicca
la source
0

Vérifiez d'abord les journaux pourquoi le conteneur a échoué. Parce que votre politique de redémarrage peut ramener votre conteneur à l'état d'exécution. Mieux vaut résoudre le problème, alors vous pouvez probablement créer une nouvelle image avec / sans correctif. Exécutez plus tard la commande ci-dessous

docker system prune

https://forums.docker.com/t/docker-registry-in-restarting-1-status-forever/12717/3

Nagendran
la source
0

Essayez d'ajouter ces paramètres à votre fichier yml docker

restart: "no"
  restart: always
  restart: on-failure
  restart: unless-stopped
  environment:
    POSTGRES_DB: "db_name"
    POSTGRES_HOST_AUTH_METHOD: "trust"

Le fichier final devrait ressembler à ceci

postgres:
  restart: "no"
  restart: always
  restart: on-failure
  restart: unless-stopped
  image: postgres:latest
  volumes:
    - /data/postgresql:/var/lib/postgresql
  ports:
    - "5432:5432"
  environment:
    POSTGRES_DB: "db_name"
    POSTGRES_HOST_AUTH_METHOD: "trust"
Phillip Kigenyi
la source