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

Docker: добавьте политику перезагрузки в контейнер, который уже был создан.

Я вижу, что Docker добавил что-то, называемое перезагрузкой политик, для обработки перезапуска контейнеров в случае, например, перезагрузки.

Хотя это очень полезно, я вижу, что команда политики перезапуска работает только с docker run, а не docker start. Поэтому мой вопрос:

Есть ли способ добавить политики перезапуска в контейнер, который уже был создан в прошлом?

4b9b3361

Ответ 1

В последних версиях docker (начиная с 1.11) у вас есть команда update:

docker update --restart=always <container>

Ответ 2

Существует два подхода для модификации RestartPolicy:

  • Узнайте идентификатор контейнера, остановите всю службу докеров, измените /var/lib/docker/containers/CONTAINER _ID/hostconfig.json, установите RestartPolicy → Name на "always" и запустите службу докеров.
  • docker commit ваш контейнер как новое изображение, остановите и запустите текущий контейнер и запустите новый контейнер с изображением.

Ответ 3

Использование --restart=always политика будет обрабатывать перезапуск существующих контейнеров в случае перезагрузки.

Проблема заключается в том, что если есть несколько контейнеров с --restart=always когда вы запускаете образ более новой версии, как обсуждалось в Docker, - как отключить автоматический перезапуск контейнера? ,

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

$ docker run --rm --restart always <image>
Conflicting options: --restart and --rm

Поэтому в этом случае лучше выбрать другой вариант: --restart, если политика не остановлена.

$ docker run --rm --restart unless-stopped <image>

Эта политика не будет противоречить docker run --rm но как объяснено в документации докера:

Это похоже на --restart=always, за исключением того, что когда контейнер останавливается (вручную или иным образом), он не перезапускается даже после перезапуска демона Docker.

Таким образом, при использовании этой --restart unless-stopped, чтобы убедиться, что перезапуск работает в случае, если он случайно остановился при закрытии терминала, выполните один раз в другом терминале, как показано ниже:

$ docker ps
$ docker restart <container>

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

$ docker ps

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

Ответ 4

Нет. И, как правило, вы не можете редактировать контейнер после его создания (открытый порт, имя хоста, сетевые настройки) через Docker. Вам нужно будет воссоздать его с помощью docker run.

Как правило, правильная практика заключается в том, что ваш контейнер не имеет гражданства, поэтому он не должен вызывать никаких проблем. Взгляните на тома (-v), чтобы помочь вам в этом.