191 votes

Docker : Le conteneur n'arrête pas de redémarrer encore et encore

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 s'attacher au conteneur frontal mediawiki en utilisant :

docker attach mediawiki_web_1

qui répond à Terminated sur ma configuration pour une raison que j'ignore, j'essaie 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 voilà mon nouveau problème, car ce conteneur ne cesse de redémarrer. Je peux voir qu'en utilisant docker ps -a qui renvoie toujours un STATUS de Restarting (127) x seconds ago .

Le problème 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 ? L'ensemble fonctionnait correctement jusqu'à ce que j'essaie de l'attacher...

Je suis triste :-(

0 votes

J'ai réussi en supprimant complètement mon cache Docker, en utilisant forums.docker.com/t/how-to-delete-cache/5753/2 (J'ai également ajouté la balise -f à rmi). J'ai ensuite reconstruit mes conteneurs et ils ont fonctionné.

0 votes

Pour moi, il ne suffisait pas de supprimer les conteneurs et les images (comme décrit dans le lien de @alberto56), je devais également supprimer le volume associé. Une fois que j'ai fait cela, j'étais de retour dans les affaires.

288voto

Matt Points 25814

El docker logs vous montrera la sortie qu'un conteneur génère lorsque vous ne l'exécutez pas de manière interactive. Il est probable que cela inclue 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 ça donne. Il se peut que vous deviez mapper une partie de la configuration de votre docker-compose yml au docker commandement.

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

0 votes

Le résultat de la commande que vous avez fournie et qui, je suppose, récupère les 50 derniers journaux relatifs 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. Je vais essayer d'exécuter le conteneur une fois de plus à partir du premier plan comme vous l'avez conseillé. J'ai juste besoin de trouver comment spécifier les 25 arguments appropriés ^^

10 votes

Merci, la mise en place d'un nouveau container a fait l'affaire. 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 davantage...

0 votes

Je m'arrachais les cheveux à essayer de faire fonctionner MySQL. docker ps -a m'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. Vous m'avez épargné des heures supplémentaires à m'arracher les cheveux. Merci !

41voto

Giannis Katsini Points 71

Quand docker kill CONTAINER_ID ne fonctionne pas et docker stop -t 1 CONTAINER_ID ne 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 continue.

Dans mon cas, le problème é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 corrigeant mon code, puis en reconstruisant et en exécutant le conteneur.

J'espère que cela aidera toute personne confrontée à ce problème à l'avenir.

5 votes

J'avais mis du mauvais code dans mon application et dans mon fichier docker compose j'ai ajouté restart: always ce qui m'a laissé dans une boucle de docker essayant de démarrer une application cassée :(

1 votes

Ah, je vois que vous êtes un pauvre ingénieur, moi aussi je suis un pauvre ingénieur et j'ai eu exit() dans mon code par accident.

10voto

meshde Points 93

en résumé Il redémarre avec un code d'état de 127 ce qui signifie qu'il manque un fichier ou une bibliothèque dans votre conteneur. Le démarrage d'un nouveau conteneur peut résoudre ce problème.

Explication :

D'après ce que je comprends de Docker, c'est ce qui se passe :

  1. Le conteneur essaie de démarrer. Au cours de ce processus, il tente d'accéder à un fichier/bibliothèque qui n'existe pas.
  2. Il se termine avec un code d'état de 127 qui est expliqué dans cette réponse .
  3. Normalement, c'est là que le conteneur aurait dû sortir complètement, mais il redémarre.
  4. Il redémarre parce que le politique de redémarrage doit avoir été réglé sur quelque chose d'autre que no ( le défaut ), (en utilisant soit l'indicateur de ligne de commande --restart ou le docker-compose.yml clé restart ) lors du démarrage du conteneur.

Solution : Quelque chose a pu corrompre votre conteneur. Le démarrage d'un nouveau conteneur devrait idéalement faire l'affaire.

8voto

vijayraj34 Points 385

Dans mon cas, j'ai supprimé

Restart=always

ajouté

tty: true

Et exécuté la commande ci-dessous pour ouvrir le shell (processus démon, car docker lit le fichier compose et arrête le conteneur lorsqu'il atteint la dernière ligne du fichier).

docker-compose up -d

0 votes

Toutes les étapes ont un sens dans mon cas

6voto

Stevie G Points 931

Cela peut également être le cas si vous avez créé une systemd service qui a :

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

1 votes

Vous avez sauvé ma journée. Un grand merci à vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X