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)


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


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

12

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

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

docker service ls

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

docker service rm <service id discovered with previous command>

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.