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

Docker - как отключить автозапуск на контейнере?

Я могу включить автозапуск с помощью --restart=always, но после того, как я остановил контейнер, как отключить этот атрибут?

Обычно я запускаю веб-сервер и обычно отображаю порт 80:

docker run -d --restart=always -p 80:80 -i -t myuser/myproj /bin/bash

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

4b9b3361

Ответ 1

Вы можете использовать --restart=unless-stopped, как упомянуто @Shibashis, или обновить политику перезапуска (для этого требуется докер 1.11 или новее);

См. Документацию по docker update Docker и политикам перезапуска Docker.

docker update --restart=no my-container

обновляет политику рестарта для существующего контейнера (my-container)

Ответ 2

Вы можете запустить свой контейнер с помощью --restart=unless-stopped.

Ответ 3

Если у вас есть рой, перезапускающий контейнеры, рой перезапустит все контейнеры, которые вы остановили или запустили, независимо от опции перезапуска. Это особенность, а не ошибка.

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

docker service ls

Затем вы можете остановить службу

docker service rm <service id discovered with previous command>

Ответ 4

TL & амп; ДР:

Используйте приведенное ниже, чтобы отключить ВСЕ работающие контейнеры.

docker update --restart=no $(docker ps -a -q)

Используйте следующее, чтобы отключить перезапуск одного контейнера.

docker update --restart=no the-container-you-want-to-disable-restart

Rational:

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

Примечания

Если вы используете docker-compose, это может быть полезно знать.

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

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped

restart: always