какие образы dockerd запускает автоматически?

какие образы dockerd запускает автоматически?

После того, как я перезапустил службу Docker на компьютере с Ubuntu, service docker restartзапустив некоторые контейнеры, я не ожидал, что она запустится.

Почему так? Какой файл конфигурации/хранилище/что-то еще хранит информацию о том, какие образы следует запускать?

У меня много изображений (~50) при их перечислении с помощью docker images. Но только 8 из них запускаются, когда я запускаю dockerd. Почему? Как это изменить?

Спасибо.

решение1

Для отдельных контейнеров есть политика перезапуска, которую вы можете применить. Она устанавливается docker run --restart=...при запуске контейнера или в restart: ...строке в файле yml для компоновки. Вы можете изменить политику перезапуска в существующем контейнере с помощью:

$ docker update --restart=... ${container_name_or_id}

Чтобы получить список всех контейнеров и их политик перезапуска, вы можете выполнить это из bash:

$ docker container ls -q | \
  xargs docker container inspect --format \
          '{{ .Name }}: {{.HostConfig.RestartPolicy.Name}}'

Theперезапустить политикуВы можете использовать:

нет Не перезапускать контейнер автоматически при выходе. Это значение по умолчанию.

при сбое[:макс-повторов] Перезапустите только если контейнер выходит с ненулевым статусом выхода. При желании ограничьте количество попыток перезапуска, которые пытается выполнить демон Docker.

всегда Всегда перезапускать контейнер независимо от статуса выхода. Если указать always, демон Docker будет пытаться перезапустить контейнер бесконечно. Контейнер также всегда будет запускаться при запуске демона, независимо от текущего состояния контейнера.

если не остановлено Всегда перезапускайте контейнер независимо от статуса выхода, но не запускайте его при запуске демона, если контейнер ранее был переведен в состояние остановки.

Политика перезапуска alwaysприведет к неожиданному перезапуску контейнера после перезапуска демона docker, как вы видите, даже если вы намеренно остановили контейнер. По этой причине я обычно создаю отдельные контейнеры с unless-stoppedполитикой перезапуска.


Если вы используете режим docker swarm, то службы будут автоматически запускать новый контейнер каждый раз, когда целевое состояние не соответствует текущему состоянию. Для кластера swarm с одним узлом, часто встречающегося на ноутбуках, это означает, что контейнер перезапустится при перезапуске docker, но также и если вы просто остановите или удалите работающий контейнер.

Окончательная остановка и удаление службы:

$ 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}

решение2

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

$ docker inspect container-name

Обычно это происходит, когда контейнер был создан с флагом --restartalways

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

$ docker update --restart=no container-name

Другой способ обойти это — установить RestartPolicy на значение unrestopped при запуске контейнера. Вы можете прочитать полную документациюобновление докера

решение3

Посмотрите на политику перезапуска docker, например --restart always. Я предполагаю, что некоторые из ваших контейнеров используют это. Проверьте скрипт запуска службы для docker. Вы можете использовать , docker ps -a --no-truncчтобы увидеть полный список.

решение4

Образы не запускаются автоматически, это делают контейнеры.

На service docker restartконтейнерах, гдеостановилсяилиначалс --restart alwaysфлагом будет запущен снова автоматически при перезапуске. Проверьте это через docker ps -a.

Если вы не хотите, чтобы контейнер запускался (даже с --restart alwaysфлагом), вам просто нужно удалить его docker rm containerили docker-compose down.

Связанный контент