Docker: контейнер продовжує знову перезавантажуватися


108

Я сьогодні розгорнув екземпляр MediaWiki за допомогою зображення докера appcontainers / mediawiki, і тепер у мене з’явилася нова проблема, про яку я не можу знайти жодної підказки. Після спроби приєднати до переднього контейнера mediawiki за допомогою:

docker attach mediawiki_web_1

який відповідає Terminatedв моїй конфігурації з причини, яку я ігнорую, намагаючись також:

docker exec -it mediawiki_web_1 bash

Я отримую щось близьке до повідомлення про помилку:

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

І є моя нова проблема, оскільки цей контейнер ніколи не перестає перезавантажуватися. Я бачу, що за допомогою docker ps -aякого завжди повертається СТАТУТ Restarting (127) x seconds ago.

Справа в тому, що я в змозі зупинити контейнер (я тестував), але, запускаючи його знову, здається, повертаю його в його цикл перезавантаження.

Будь-яка ідея, що може бути проблемою тут? Вся справа працювала належним чином, поки я не намагався приєднатись до неї ...

Мені сумно :-(


Я мав успіх, повністю видаливши весь кеш-пам'ять Docker, використовуючи forums.docker.com/t/how-to-delete-cache/5753/2 (я також додав тег -f до rmi). Потім я відновив свої контейнери, і вони працювали.
alberto56

Для мене було недостатньо видалити контейнери та зображення (як описано у посиланні @ alberto56), я також повинен був видалити пов'язаний том. Як тільки я це зробив, я знову був у бізнесі.
Katie Byers

Відповіді:


172

docker logsКоманда покаже вам вихід генерує контейнер , коли ви не запустити його в інтерактивному режимі . Це, ймовірно, включає повідомлення про помилку.

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

Ви також можете запустити свіжий контейнер на передньому плані, docker run -ti <your_wiki_image>щоб побачити, що це робить. Можливо, вам доведеться зіставити деяку конфігурацію з вашого docker-composeyml в dockerкоманду.

Я б здогадався, що приєднання до процесу вікі-медіа спричинило збій, що щось зіпсувало ваші дані.


Результат команди, яку ви надали, і, напевно, отримує останні 50 журналів, пов’язаних з контейнером, такий:, 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значить, ви маєте рацію, у даних є щось пошкоджене, оскільки, здається, що runconfig.sh зникло. Я спробую запустити контейнер ще раз на передньому плані, як ви порадили. Просто потрібно знайти, як вказати 25 власних аргументів ^^
Балесан

7
Дякую, запуск свіжого контейнера зробив цю роботу. Докер повинен був полегшити моє розгортання, але наразі це велика невдача :-) Мені, мабуть, потрібно навчитися і спробувати більше ...
Balessan

Я витягнув волосся, намагаючись працювати з MySQL. docker ps -aпоказав мені, що він застряг у циклі завантаження і ваша команда показала мені, чому: файли вже в каталозі mysql, які він не може видалити. Ти врятував мене від ще декількох годин витягування мого волосся. Дякую!
Blizzardengle

32

Коли docker kill CONTAINER_IDне працює, а docker stop -t 1 CONTAINER_IDтакож не працює, ви можете спробувати видалити контейнер:

docker container rm CONTAINER_ID

У мене була подібна проблема сьогодні, коли контейнери знаходилися в циклі безперервного перезавантаження.

Проблема в моєму випадку стосувалася того, що я поганий інженер.

У будь-якому разі я вирішив проблему, видаливши контейнер, виправивши свій код, а потім відновив і запустив контейнер.

Сподіваємось, що це допоможе будь-кому, хто стикається з цим питанням у майбутньому


4
Я поставив поганий код у своїй програмі, а в своєму докерному файлі склав файл, restart: alwaysякий додав, що залишив мене в петлі докера, намагаючись запустити непрацюючу програму .. :(
Giannis Katsini

4

З особистого досвіду це здається, що в контейнері докера є проблема, яка не дозволяє йому перезавантажуватися. Таким чином, якийсь процес у контейнері викликає зависання перезавантаження або якийсь процес викликає збій контейнера при запуску.

Коли ви запускаєте контейнер, переконайтеся, що ви запускаєте його від'єднаним "-d", якщо ви збираєтесь приєднати до нього. (напр., "docker run -d mediawiki_web_1")


Я припускаю, що контейнер запускає за допомогою докер-композиційного від'єднаного, все одно, ні? Або аргумент -d відсутній у моєму конфігураційному файлі. перевіримо це.
Балесан

4

tl; dr. Перезапускається з кодом статусу 127, тобто у вашому контейнері відсутній файл / бібліотека. Запуск свіжого контейнера просто може це виправити.

Пояснення:

Наскільки я розумію Докера, ось що відбувається:

  1. Контейнер намагається запустити. У цьому процесі він намагається отримати доступ до файлу / бібліотеки, який не існує.
  2. Він виходить із кодом статусу 127, який пояснюється у цій відповіді .
  3. Зазвичай це контейнер повинен був повністю вийти, але він перезавантажується.
  4. Він перезапускається, оскільки під час запуску контейнера для політики перезавантаження повинно бути встановлено щось інше, ніж no( за замовчуванням ) (використовуючи прапор командного рядка --restartабо docker-compose.ymlключ restart).

Рішення: Щось може зіпсувати ваш контейнер. Запуск свіжого контейнера в ідеалі повинен зробити цю роботу.


2

Це також може бути, якщо ви створили systemdслужбу, яка має:

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

1

У моєму випадку контейнер nginx продовжував перезапуск, я перевіряв журнали контейнера nginx і дізнався, що .crt та .key-файл непотрібного домену мають помилки, тому я видалив відповідний файл .conf, .crt і .key, а потім перезапустив nginx. Ось це nginx працює нормально без перезавантаження.


0

Я забув, що Minikube працює у фоновому режимі, і це те, що завжди перезапускало їх


0

Спочатку перевірте журнали, чому контейнер не вдався. Оскільки ваша політика перезавантаження може повернути контейнер до робочого стану. Краще виправити проблему, тоді, ймовірно, ви можете створити нове зображення з / без виправлення. Пізніше виконуйте команду нижче

docker system prune

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


0

Спробуйте додати ці парами до файлу ycker докер

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

Заключний файл повинен виглядати приблизно так

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"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.