Docker - как отключить автозапуск на контейнере?
Я могу включить автозапуск с помощью --restart=always
, но после того, как я остановил контейнер, как отключить этот атрибут?
Обычно я запускаю веб-сервер и обычно отображаю порт 80:
docker run -d --restart=always -p 80:80 -i -t myuser/myproj /bin/bash
Но есть моменты, когда я хочу запустить более новую версию моего изображения, но я хочу сохранить старый контейнер. Проблема в том, что если есть несколько контейнеров с --restart=always
, запускается только один из них (random?), Потому что все они борются за порт 80 на хосте.
Ответы
Ответ 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