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

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

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

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

Brad Grissom

Ответов: 6

Ответы (6)

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

См. Документацию для обновления докеров и политик перезапуска Docker.

docker update --restart=no my-container

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

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

обновление докера --restart = да / нет <имя-контейнера / идентификатор контейнера>

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

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

docker service ls

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

docker service rm 

Не ответ на этот вопрос, а на Как предотвратить автоматический запуск контейнера докером при запуске системы?, который был помечен как дубликат этого вопроса.

Если ваш контейнер запущен с помощью restart = on-failure и имеет ошибочную команду, которая завершается с ненулевым кодом выхода, когда вы останавливаете контейнер с помощью docker stop, он показывает странное поведение: после остановки контейнера с помощью docker stopконтейнер останавливается, но после перезапуска демона докера (или системы) он снова запускается автоматически. Чтобы исправить это, либо исправьте команду контейнера, либо используйте no или без остановки в качестве политики перезапуска.

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

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

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

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

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

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

Примечания

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

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

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

restart: always

2022 WebDevInsider