Docker: Der Container wird immer wieder neu gestartet


107

Ich habe heute eine Instanz von MediaWiki mithilfe des Docker-Images "appcontainers / mediawiki" bereitgestellt und habe jetzt ein neues Problem, für das ich keinen Hinweis finden kann. Nach dem Versuch, eine Verbindung zum Frontcontainer des MediaWiki herzustellen, verwenden Sie Folgendes:

docker attach mediawiki_web_1

welche Antworten Terminatedauf meine Konfiguration aus einem Grund, den ich ignoriere und auch versuche:

docker exec -it mediawiki_web_1 bash

Ich bekomme etwas in der Nähe einer Fehlermeldung:

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

Und da ist mein neues Problem, weil dieser Container nie aufhört, neu zu starten. Ich kann das mit sehen, docker ps -adas immer einen STATUS von zurückgibt Restarting (127) x seconds ago.

Die Sache ist, ich kann den Container stoppen (ich habe ihn getestet), aber ein erneutes Starten scheint ihn wieder in seine Neustartschleife zu bringen.

Irgendeine Idee, was hier das Problem sein könnte? Das Ganze funktionierte einwandfrei, bis ich versuchte, mich daran zu befestigen ...

Ich bin traurig :-(


Ich hatte Erfolg, indem ich meinen gesamten Docker-Cache mithilfe von forums.docker.com/t/how-to-delete-cache/5753/2 vollständig löschte (ich habe auch das -f-Tag zu rmi hinzugefügt). Dann habe ich meine Container wieder aufgebaut und sie haben funktioniert.
Alberto56

Für mich war es nicht genug, Container und Bilder zu löschen (wie im Link von @ alberto56 beschrieben), ich musste auch das zugehörige Volume löschen. Nachdem ich das getan hatte, war ich wieder im Geschäft.
Katie Byers

Antworten:


170

Der docker logsBefehl zeigt Ihnen die Ausgabe, die ein Container generiert, wenn Sie ihn nicht interaktiv ausführen. Dies beinhaltet wahrscheinlich die Fehlermeldung.

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

Sie können auch einen neuen Container im Vordergrund ausführen, um docker run -ti <your_wiki_image>zu sehen, was dies bewirkt. Möglicherweise müssen Sie docker-composedem dockerBefehl eine Konfiguration aus Ihrem yml zuordnen .

Ich würde vermuten, dass das Anhängen an den Medien-Wiki-Prozess einen Absturz verursacht hat, der etwas in Ihren Daten beschädigt hat.


Das Ergebnis des von Ihnen angegebenen Befehls, bei dem die letzten 50 Protokolle für den Container 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 directoryabgerufen werden, lautet wie folgt: Sie haben also Recht, die Daten sind beschädigt, da die Datei runconfig.sh verschwunden zu sein scheint. Ich werde versuchen, den Container noch einmal im Vordergrund auszuführen, wie Sie empfohlen haben.
Ich

7
Danke, ein frischer Container hat den Job gemacht. Docker sollte meine Bereitstellung vereinfachen, aber im
Moment

Ich habe mir die Haare ausgezogen, um MySQL zum Laufen zu bringen. docker ps -azeigte mir, dass es in einer Boot-Schleife steckte und Ihr Befehl zeigte mir warum: Dateien bereits im MySQL-Verzeichnis, die es nicht löschen konnte. Du hast mich vor Stunden gerettet, in denen ich mir die Haare ausgezogen habe. Vielen Dank!
Blizzardengle

32

Wenn docker kill CONTAINER_IDes nicht funktioniert und docker stop -t 1 CONTAINER_IDauch nicht funktioniert, können Sie versuchen, den Container zu löschen:

docker container rm CONTAINER_ID

Ich hatte heute ein ähnliches Problem, bei dem sich Container in einer kontinuierlichen Neustartschleife befanden.

Das Problem in meinem Fall hing damit zusammen, dass ich ein armer Ingenieur war.

Wie auch immer, ich habe das Problem behoben, indem ich den Container gelöscht, meinen Code repariert und dann den Container neu erstellt und ausgeführt habe.

Ich hoffe, dass dies jedem hilft, der sich in Zukunft mit diesem Problem befasst


4
Ich hatte schlechten Code in meine Anwendung eingefügt und in meine Docker-Compose-Datei eingefügt, restart: alwaysdie mich in einer Docker-Schleife zurückließ, die versuchte, eine kaputte App zu starten. :(
Giannis Katsini

4

Aus persönlicher Erfahrung scheint es ein Problem in Ihrem Docker-Container zu geben, das einen Neustart nicht zulässt. Ein Prozess innerhalb des Containers führt also dazu, dass der Neustart hängen bleibt, oder ein Prozess führt dazu, dass der Container beim Start abstürzt.

Wenn Sie den Container starten, stellen Sie sicher, dass Sie ihn getrennt "-d" starten, wenn Sie ihn anhängen möchten. (zB "Docker run -d mediawiki_web_1")


Ich gehe davon aus, dass der Container mit Docker-Compose trotzdem getrennt wird, oder? Oder das Argument -d fehlt in meiner Konfigurationsdatei. werde das überprüfen.
Balessan

4

tl; dr Es wird mit dem Statuscode von neu gestartet 127, was bedeutet, dass in Ihrem Container eine Datei / Bibliothek fehlt. Das Starten eines neuen Behälters könnte das Problem beheben.

Erläuterung:

Nach meinem Verständnis von Docker geschieht Folgendes:

  1. Container versucht zu starten. Dabei wird versucht, auf eine nicht vorhandene Datei / Bibliothek zuzugreifen.
  2. Es wird mit einem Statuscode von beendet 127, der in dieser Antwort erläutert wird .
  3. Normalerweise sollte der Container hier vollständig beendet sein, aber er wird neu gestartet.
  4. Es wird neu gestartet, da die Neustartrichtlinie beim Starten des Containers auf etwas anderes als no( die Standardeinstellung ) festgelegt worden sein muss (entweder mithilfe des Befehlszeilenflags --restartoder des docker-compose.ymlSchlüssels restart).

Lösung: Möglicherweise ist Ihr Container beschädigt. Das Starten eines neuen Behälters sollte idealerweise die Arbeit erledigen.


2

Dies kann auch der Fall sein, wenn Sie einen systemdDienst erstellt haben, der Folgendes hat:

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

0

In meinem Fall wurde der Nginx-Container immer wieder neu gestartet. Ich überprüfte die Protokolle des Nginx-Containers und stellte fest, dass .crt- und .key-Dateien einer nicht erforderlichen Domäne fehlerhaft sind. Daher entfernte ich die entsprechenden .conf-Dateien, .crt und .key und startete neu Nginx. Das ist es, Nginx funktioniert gut ohne Neustart.


0

Ich hatte vergessen, dass Minikube im Hintergrund lief, und das war es, was sie immer wieder neu startete



0

Versuchen Sie, diese Parameter zu Ihrer Docker-XML-Datei hinzuzufügen

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

Die endgültige Datei sollte ungefähr so ​​aussehen

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"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.