Как только я перезапущу службу докеров в Ubuntu, используя service docker restart
он запустил некоторые из контейнеров, я не ожидал, что он запустится.
Это почему? Какой файл конфигурации / хранилище / какая-либо информация о том, какие изображения следует запускать?
У меня много изображений (~ 50), когда я перечисляю их с docker images
. Но только 8 из них запускаются, когда я запускаю dockerd
. Зачем? Как мне это исправить?
Спасибо.
Для отдельных контейнеров вы можете применить политику перезапуска. Это установлено с docker run --restart=...
при запуске контейнера или restart: ...
в файле compose yml. Вы можете изменить политику перезапуска в существующем контейнере с помощью:
$ docker update --restart=... ${container_name_or_id}
Чтобы перечислить все контейнеры и их политики перезапуска, вы можете запустить это из bash:
$ docker container ls -q | \
xargs docker container inspect --format \
'{{ .Name }}: {{.HostConfig.RestartPolicy.Name}}'
В политики перезапуска вы можете использовать:
нет Не перезапускайте контейнер автоматически при выходе. Это значение по умолчанию.
при ошибке [: max-retries] Перезапустите, только если контейнер выходит с ненулевым статусом выхода. При желании можно ограничить количество повторных попыток перезапуска демона Docker.
всегда Всегда перезапускайте контейнер независимо от статуса выхода. Если вы укажете always, демон Docker будет пытаться перезапустить контейнер на неопределенный срок. Контейнер также всегда запускается при запуске демона, независимо от текущего состояния контейнера.
если не остановлен Всегда перезапускайте контейнер независимо от статуса выхода, но не запускайте его при запуске демона, если контейнер ранее был переведен в состояние остановки.
Политика перезапуска always
приведет к неожиданному перезапуску контейнера после перезапуска демона докера, как вы видите, даже если вы намеренно остановили контейнер. По этой причине я обычно создаю автономные контейнеры с unless-stopped
политика перезапуска.
Если вы используете режим docker swarm, то службы будут автоматически запускать новый контейнер каждый раз, когда целевое состояние не соответствует текущему состоянию. Для кластера роя с одним узлом, который часто встречается на ноутбуках, это означает, что контейнер будет перезапущен при перезапуске докера, а также если вы просто остановите или удалите работающий контейнер.
Окончательная остановка и удаление службы:
$ docker service ls # to show the running services
$ docker service rm ${service_id_or_name}
Если для службы настроен режим репликации, и вы просто хотите временно остановить ее, не удаляя службу, вы можете обновить целевые реплики до 0:
$ docker service update --replicas=0 ${service_id_or_name}
И сервисы могут быть развернуты как часть стека. Чтобы удалить весь стек:
$ docker stack ls # to show the defined stacks
$ docker stack rm ${stack_id_or_name}
Образы не запускаются автоматически, в отличие от контейнеров.
На service docker restart
контейнеры, которые где остановился или началось с участием --restart always
Флаг будет снова запущен автоматически при перезапуске. Проверить это через docker ps -a
.
Если вы не хотите, чтобы контейнер запускался (даже если --restart always
флаг), вам просто нужно его удалить, docker rm container
или docker-compose down
.
Посмотрите политику перезапуска докеров, например --restart always
. Я предполагаю, что некоторые из ваших контейнеров используют это. Проверьте сценарий запуска службы на наличие докеров. Ты можешь использовать docker ps -a --no-trunc
чтобы увидеть полный список.
Это означает, что для некоторых из ваших контейнеров RestartPolicy установлено всегда. Это означает, что контейнер должен быть всегда поднят. Пожалуйста, проверьте эти контейнеры, в частности, проверяя значение RestartPolicy.
$ docker inspect container-name
Обычно это происходит, когда контейнер был создан с флагом --restart
всегда
Чтобы отключить автозапуск контейнера, используйте команду:
$ docker update --restart=no container-name
Другой способ обойти это - установить RestartPolicy в значение без остановки при запуске контейнера. Вы можете прочитать полную документацию по обновление докера