docker - як вимкнути автоматичний перезапуск контейнера?


156

Я можу ввімкнути автоматичний перезапуск --restart=always, але як я зупиняю контейнер, як вимкнути цей атрибут?

Я зазвичай запускаю веб-сервер і зазвичай порт 80:

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

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

Відповіді:


326

Ви можете використовувати цю --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


22

Використовуйте наведене нижче, щоб вимкнути ВСІ автоматичні перезавантаження (демон) контейнерів.

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

Використовуйте наступне, щоб відключити перезапуск контейнера SINGLE.

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.