Докер: контейнер снова перезагружается


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 с помощью forum.docker.com/t/how-to-delete-cache/5753/2 (я также добавил тег -f в rmi). Затем я восстановил свои контейнеры, и они заработали.
alberto56

Для меня было недостаточно удалить контейнеры и изображения (как описано в ссылке @ alberto56), мне также пришлось удалить связанный том. Как только я это сделал, я вернулся в бизнес.
Кэти Байерс

Ответы:


173

Команда 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
Спасибо, запуск нового контейнера сделал свою работу. Предполагалось, что Docker упростит мое развертывание, но на данный момент это большой провал :-) Мне, вероятно, нужно выучить и попробовать больше ...
Балессан

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

33

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

docker container rm CONTAINER_ID

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

В моем случае проблема была связана с тем, что я был плохим инженером.

В любом случае я исправил проблему, удалив контейнер, исправив код, а затем перестроив и запустив контейнер.

Надеюсь, что это поможет кому-нибудь решить эту проблему в будущем.


4
Я поместил плохой код в свое приложение и в свой файл компоновки докеров, который я добавил, restart: alwaysчто оставило меня в цикле докеров, пытающихся запустить сломанное приложение .. :(
Яннис Кацини

4

Из личного опыта похоже, что в вашем контейнере докеров есть проблема, которая не позволяет ему перезапускаться. Таким образом, какой-то процесс в контейнере вызывает зависание перезапуска или какой-то процесс вызывает сбой контейнера при запуске.

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


Я предполагаю, что запуск контейнера с использованием docker-compose все равно отсоединил его, нет? Или в моем файле конфигурации отсутствует аргумент -d. проверим это.
Balessan

4

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

Пояснение:

Насколько я понимаю Docker, происходит следующее:

  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

Попробуйте добавить эти параметры в ваш файл docker yml

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.