Остановить отказавший контейнер с помощью restart = always

Я хочу остановить контейнер, который не перезапускается (он находится в состоянии Restarting). В контейнере есть restart=always. Делает:

docker stop <container>

кажется успешным (нет сообщения об ошибке), но контейнер все равно перезапускается. Эта же команда фактически останавливает контейнеры с restart=always, которые перезапустились нормально.

Если я попытаюсь убить контейнер:

docker kill <container>

Получаю сообщение: container is not running (это правда)

Удаление контейнера работает:

docker rm <container>

Контейнер не перезапустится, так как он больше не существует. Но это не то, что я хотел: я только хотел, чтобы он перестал перезагружаться.

Как я могу остановить отказавший, перезапускающий контейнер, не удаляя его?

2
0
1 691
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете взглянуть на docker pause. Пожалуйста, посмотрите, это документация здесь

Ответ принят как подходящий

Вы можете сначала изменить restart policy с помощью docker container update:

docker container update --restart="no" <your container name>

а затем продолжайте:

docker container stop <your container name>

Restart policies (--restart):

  • no: Do not automatically restart the container when it exits. This is the default.
  • on-failure[:max-retries]: Restart only if the container exits with a non-zero exit status. Optionally, limit the number of restart retries the Docker daemon attempts.
  • always: Always restart the container regardless of the exit status. When you specify always, the Docker daemon will try to restart the container indefinitely. The container will also always start on daemon startup, regardless of the current state of the container.
  • unless-stopped: Always restart the container regardless of the exit status, including on daemon startup, except if the container was put into a stopped state before the Docker daemon was stopped.

Довольно громоздкий, но, кажется, общепринятый способ добиться этого. Я просто ожидал, что команда stop остановит контейнер, несмотря ни на что (без влияния на политику перезапуска, так что ручной перезапуск снова переводит его в режим автоматического перезапуска). На самом деле docker stop <container> действительно останавливает контейнеры, которые удалось запустить, поэтому поведение непоследовательно.

blueFast 07.11.2018 10:50

Да, похоже, это сбивает с толку и других ... github.com/moby/moby/issues/10032. Возможно, флаг для команды stop (что-то вроде --force-no-restart) будет менее запутанным.

tgogos 07.11.2018 11:13

спасибо за подсказку. Я добавил описание своей проблемы

blueFast 07.11.2018 12:14

Другие вопросы по теме