Не удается остановить или перезапустить контейнер докера
При попытке остановить или перезагрузить контейнер докера я получаю следующее сообщение об ошибке:
$ docker restart 5ba0a86f36ea
Error response from daemon: Cannot restart container 5ba0a86f36ea: [2] Container does not exist: container destroyed
Error: failed to restart containers: [5ba0a86f36ea]
Но когда я запустил
$ docker logs -f 5ba0a86f36ea
Я вижу журналы, поэтому контейнер явно существует. Любые идеи?
Edit:
Извините, я забыл упомянуть об этом:
Когда я запускаю docker ps -a
, я вижу контейнер в рабочем состоянии. Однако приложение внутри него работает неправильно, поэтому я хочу перезапустить его или просто получить новую версию этого приложения в Интернете. Но когда я не могу остановить и удалить контейнер, я также не могу запустить и запустить новое приложение, которое будет прослушивать один и тот же порт.
Ответы
Ответ 1
Это выглядит как docker/docker/issues/12738, с помощью docker 1.6 или 1.7:
Некоторые контейнеры не могут нормально остановиться, а перезапуск
Мы часто сталкиваемся с этой проблемой в наших хостах пользователей при обновлении с 1.5.0 до 1.6.0.
После обновления некоторые контейнеры не могут быть остановлены (предоставление 500 Server Error: Internal Server Error ("Cannot stop container xxxxx: [2] Container does not exist: container destroyed"
)) или принудительное уничтожение (предоставление 500 Server Error: Internal Server Error ("Could not kill running container, cannot remove - [2] Container does not exist: container destroyed"
)). Процессы все еще запущены на хосте.
Иногда он работает после перезапуска демона докеров.
Есть некоторые обходные пути:
Я пробовал все удаленные вызовы API для этого unkillable контейнера, и вот результаты:
-
json
, stats
, changes
, top
, logs
возвращены действительные ответы -
stop
, pause
, wait
, kill
сообщили 404 (!)
После того, как я закончил с удаленным API, я дважды проверил docker ps
(контейнер все еще был там), но потом я снова попытался убить докера, и это сработало! Контейнер был убит, и я мог его удалить.
Или:
Сработало было перезапустить boot2docker
на моем хосте. Тогда docker rm -f
$ boot2docker stop
$ boot2docker start
$ docker rm -f 1f061139ba04
Ответ 2
boot2docker
не было на моей машине. Итак, я нашел что-то, что сработало для меня.
$ sudo systemctl restart docker.socket docker.service
$ docker rm <container id>
Проверьте, работает ли оно для вас.
Ответ 3
Стоит знать:
Если вы используете ENTRYPOINT script... script будет работать с shebang
#!/bin/bash -x
Но остановит контейнер от остановки с помощью
#!/bin/bash -xe
Ответ 4
Весь докер
start | restart | stop | rm --force | kill
команды
может не работать, если контейнер застрял. Вы всегда можете перезапустить демон Docker. Однако, если у вас запущены другие контейнеры, это может быть не вариант. Что вы можете сделать, это:
ps aux | grep <<container id>> | awk '{print $1 $2}'
Вывод содержит:
<<user>><<process id>>
Затем завершите процесс, связанный с контейнером, следующим образом:
sudo kill -9 <<process id from above command>>
Это убьет контейнер, и вы можете запустить новый контейнер с нужным изображением.
Ответ 5
Если ничего не помогает, вы можете удалить рабочий стол Docker в Windows и Mac, чтобы остановить контейнер.
Я убил все процессы рабочего стола докера раньше... но я не знаю, если это необходимо.
Ответ 6
Наслаждайтесь
sudo aa-remove-unknown
Это то, что сработало для меня.