Docker: Container jest ponownie uruchamiany ponownie

108

Dzisiaj wdrożyłem wystąpienie MediaWiki przy użyciu obrazu dokera appcontainers / mediawiki i mam teraz nowy problem, dla którego nie mogę znaleźć żadnej wskazówki. Po próbie podłączenia do przedniego pojemnika mediawiki za pomocą:

docker attach mediawiki_web_1

który odpowiada Terminatedna moją konfigurację z jakiegoś powodu, który ignoruję, próbując również:

docker exec -it mediawiki_web_1 bash

Otrzymuję coś zbliżonego do komunikatu o błędzie:

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

I jest mój nowy problem, ponieważ ten kontener nigdy nie przestaje się restartować. Widzę, że użycie, docker ps -aktóre zawsze zwraca STATUS Restarting (127) x seconds ago.

Chodzi o to, że jestem w stanie zatrzymać kontener (testowałem), ale ponowne uruchomienie wydaje się przywracać go do pętli restartowania.

Masz jakiś pomysł, co może być problemem? Całość działała poprawnie, dopóki nie spróbowałem się do niej przyczepić ...

Jestem smutna :-(

Balessan
źródło
Odniosłem sukces, całkowicie usuwając całą moją pamięć podręczną Dockera , używając forums.docker.com/t/how-to-delete-cache/5753/2 (dodałem także tag -f do rmi). Potem odbudowałem swoje kontenery i działały.
alberto56
Dla mnie nie wystarczyło usunięcie kontenerów i obrazów (jak opisano w linku @ alberto56), musiałem również usunąć powiązany wolumin. Kiedy to zrobiłem, wróciłem do biznesu.
Katie Byers

Odpowiedzi:

172

docker logsKomenda pokaże wyjście pojemnik jest generowanie jeśli nie uruchomić interaktywnie. Prawdopodobnie obejmuje to komunikat o błędzie.

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

Można również uruchomić nowego pojemnika na pierwszym planie z docker run -ti <your_wiki_image>aby zobaczyć co to robi. Może być konieczne docker-composezmapowanie niektórych konfiguracji z yml do dockerpolecenia.

Domyślam się, że dołączanie do procesu wiki mediów spowodowało awarię, która uszkodziła coś w twoich danych.

Matt
źródło
Wynik podanego polecenia, które 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 directorywydaje mi się, że pobiera ostatnie 50 dzienników związanych z kontenerem, jest następujący: więc masz rację, coś jest uszkodzone w danych, ponieważ plik runconfig.sh wydaje się znikać. Postaram się ponownie uruchomić kontener na pierwszym planie, tak jak radziłeś. Muszę tylko dowiedzieć się, jak określić 25 właściwych argumentów ^^
Balessan
7
Dzięki, uruchomienie nowego kontenera załatwiło sprawę. Docker miał ułatwić moje wdrożenie, ale na razie jest to duża porażka :-) Prawdopodobnie muszę się nauczyć i spróbować więcej ...
Balessan
Wyrywałem sobie włosy, próbując uruchomić MySQL. docker ps -apokazał mi, że utknął w pętli rozruchowej, a Twoje polecenie pokazało mi, dlaczego: pliki są już w katalogu mysql, których nie można usunąć. Uratowałeś mi więcej godzin wyrywania włosów. Dzięki!
Blizzardengle
32

Gdy docker kill CONTAINER_IDnie działa, a docker stop -t 1 CONTAINER_IDtakże nie działa, możesz spróbować usunąć kontener:

docker container rm CONTAINER_ID

Miałem dziś podobny problem, w którym kontenery były w ciągłej pętli restartów.

Problem w moim przypadku był związany z tym, że byłem słabym inżynierem.

W każdym razie rozwiązałem ten problem, usuwając kontener, poprawiając kod, a następnie przebudowując i uruchamiając kontener.

Mam nadzieję, że pomoże to każdemu, kto utknie z tym problemem w przyszłości

Giannis Katsini
źródło
4
Umieściłem zły kod w mojej aplikacji i dodałem do pliku redagowania dockera, restart: alwaysco pozostawiło mnie w pętli dockera próbującego uruchomić zepsutą aplikację .. :(
Giannis Katsini
4

Z własnego doświadczenia wynika, że ​​wystąpił problem w kontenerze Dockera, który nie pozwala na jego ponowne uruchomienie. Więc jakiś proces w kontenerze powoduje zawieszenie się restartu lub jakiś proces powoduje awarię kontenera przy starcie.

Kiedy uruchamiasz kontener, upewnij się, że zaczynasz go odłączony "-d", jeśli masz zamiar się do niego podłączyć. (np. „docker run -d mediawiki_web_1”)

iam10k
źródło
Zakładam, że uruchomienie kontenera przy użyciu docker-compose i tak go odłączyło, nie? Lub brak argumentu -d w moim pliku konfiguracyjnym. sprawdzi to.
Balessan
4

tl; dr Trwa ponowne uruchamianie z kodem stanu 127, co oznacza, że ​​w kontenerze brakuje pliku / biblioteki. Uruchomienie nowego pojemnika może to naprawić.

Wyjaśnienie:

Jeśli chodzi o moje rozumienie Dockera, dzieje się tak:

  1. Kontener próbuje się uruchomić. W trakcie tego procesu próbuje uzyskać dostęp do pliku / biblioteki, która nie istnieje.
  2. Wychodzi z kodem statusu 127, który wyjaśniono w tej odpowiedzi .
  3. Zwykle jest to miejsce, w którym kontener powinien zostać całkowicie zamknięty, ale uruchamia się ponownie.
  4. Uruchamia się ponownie, ponieważ zasada ponownego uruchamiania musiała być ustawiona na coś innego niż no( domyślne ) (przy użyciu flagi --restartlub docker-compose.ymlklucza wiersza poleceń restart) podczas uruchamiania kontenera.

Rozwiązanie: coś mogło uszkodzić Twój kontener. Uruchomienie nowego pojemnika powinno idealnie załatwić sprawę.

meshde
źródło
2

Może tak być również w przypadku, gdy utworzyłeś systemdusługę, która ma:

[Service]
Restart=always
ExecStart=/usr/bin/docker container start -a my_container
ExecStop=/usr/bin/docker container stop -t 2 my_container
Stephen
źródło
1

W moim przypadku kontener nginx wciąż się restartował, sprawdziłem logi kontenera nginx i dowiedziałem się, że pliki .crt i .key niepotrzebnej domeny zawierają błędy, więc usunąłem odpowiedni plik .conf, .crt i .key, a następnie uruchomiłem ponownie nginx. To wszystko, nginx działa dobrze bez ponownego uruchamiania.

Lakshmi
źródło
0

Zapomniałem, że Minikube działa w tle i to zawsze uruchamiało je ponownie

nuicca
źródło
0

Najpierw sprawdź dzienniki, dlaczego kontener się nie powiódł. Ponieważ zasady ponownego uruchamiania mogą przywrócić stan działania kontenera. Lepiej rozwiązać problem, prawdopodobnie możesz zbudować nowy obraz z poprawką / bez niej. Później wykonaj poniższe polecenie

docker system prune

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

Nagendran
źródło
0

Spróbuj dodać te parametry do pliku docker yml

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

Ostateczny plik powinien wyglądać mniej więcej tak

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
źródło