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

157

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

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

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

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

Брэд Гриссом
источник

Ответы:

329

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

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

docker update --restart=no my-container

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

thaJeztah
источник
69
Используйте, docker update --restart=no $(docker ps -a -q)чтобы обновить все ваши контейнеры :-)
Марк Mooibroek
33

Вы можете начать свой контейнер с --restart=unless-stopped.

Shibashis
источник
23

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

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

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

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

Рациональный :

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

Ноты

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

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

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

restart: always
FlyingV
источник
12

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

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

docker service ls

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

docker service rm <service id discovered with previous command>
Nachbar
источник
1
lsприводит к ошибкеError response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
naXa