Подтвердить что ты не робот

Как перезапустить существующий контейнер Docker в режиме перезапуска = "всегда"?

Когда вы изначально запускаете контейнер Docker из изображения, вы можете указать опцию:

--restart="always"

Это гарантирует, что контейнер всегда перезагружается демоном Docker, если по какой-то причине он останавливается. Таким образом, вы можете запустить контейнер следующим образом:

docker run --restart="always" <IMAGE>

Также вы можете перезапустить существующий контейнер Docker, указав его идентификатор контейнера, то есть:

docker start <CONTAINER ID>

Однако я не могу определить, возможно ли изменить существующий контейнер, который изначально не был запущен с опцией --restart="always, чтобы преобразовать его для повторного запуска в будущем.

В настоящее время единственным способом, я могу думать, это сохранить контейнер в качестве нового изображения, а затем запустить это изображение в качестве нового контейнера с опцией --restart="always". Действительно ли это будет правильным способом?

РЕДАКТИРОВАТЬ. Из-за того, что я, возможно, не излагал достаточно ясно, так это то, что я думаю о ситуации, когда в контейнере произошли изменения, поскольку они были изначально запущены, что необходимо сохранить. Так что просто запуск нового контейнера из исходного изображения будет недостаточным.

4b9b3361

Ответ 1

Хорошо, поэтому, чтобы ответить на мой собственный вопрос, кажется, что просто не перезапустить тот же контейнер с --restart=always, потому что это то, что вам нужно сделать, когда вы запускаете контейнер в первый раз, а не параметр, который вы можете использовать, когда вы запускаете существующий контейнер.

Существует три возможных варианта:

  • Как указано в @user2915097, вы можете отказаться от исходного контейнера (остановить его, а затем удалить его с помощью docker rm <CONTAINER ID>, чтобы убрать). Затем просто запустите новый контейнер из исходного изображения, указав опцию -restart=always на этот раз.
  • Если никакие тома не использовались, поэтому изменения являются внутренними для контейнера, вам необходимо перенести контейнер в новое изображение, а затем запустить новый контейнер с этого образа.

    docker commit <CONTAINER ID> <NEW IMAGE NAME>

    docker run -d --restart=always ... <NEW IMAGE NAME>

  • Если используются тома и все изменения ограничены томами, вы можете запустить второй контейнер с параметром --volumes-from без необходимости фиксации новой версии изображения. то есть.

    • docker stop <CONTAINER 1 NAME>
    • docker run -d --restart=always --volumes-from <CONTAINER 1 NAME> ... <ORIGINAL IMAGE NAME>

    Тогда было бы безопасно удалить Контейнер 1, поскольку тома не будут удалены, пока другой контейнер продолжает их использовать.

Думаю, есть и четвертая возможность; если вы использовали тома (ы), и вы знаете, что в контейнер были внесены изменения, которые не находятся на томе, тогда вам придется использовать комбинацию (2) и (3).

Ответ 2

Теперь у нас есть docker update, который позволяет изменить политику перезапуска запущенного контейнера.

docker update --restart=always <CONTAINER ID>

Есть еще три варианта:

  • no (по умолчанию)
  • на провал
  • если-не остановлен

Подробнее см. ссылку .

Ответ 3

Обновление: это позволило включить перезапуск. Но вернуть его обратно в нет, и он возвращает reset обратно, и контейнер снова запускается!:( Я собираюсь оставить этот ответ здесь, если кто-то выяснит, как это работает. Я должен быть рядом!

Люди, я нашел самое хакерское решение, которое оборачивается копированием контейнеров и т.д.

vi/var/lib/docker/container/$(docker inspect -f '{{.Id}}' $ContainerID)/hostconfig.json

Найдите "RestartPolicy". Установите его "нет", "всегда" и т.д.

Возможно, кто-то может обернуть это в script!?

В любом случае, эта часть json вместе с config.json позволит вам изменять все виды вещей, которые вы пропустили при создании своего контейнера.

Ответ 4

извлечь из http://www.brandpending.com/blog/2014/11/21/setting-and-re-setting-the-restart-behaviour-of-a-docker-container

Итак, скажем, вы хотите изменить политику перезапуска этого контейнера от всегда до отказа. Для этого вам необходимо остановить контейнер, удалите его и заново запустите с новой политикой перезапуска.