Предположим, у меня есть контейнер Docker, который я хочу запустить, тогда я могу вызвать
$ docker run ...
и все нормально. Есть ли встроенный способ запустить контейнер таким образом, чтобы он автоматически перезапускался, если система выйдет из строя и перезагрузится?
Если да, доступно ли это также в Docker Compose?
docker
docker-compose
Голо Роден
источник
источник
Systemd
качестве менеджера услуг является одним из лучших решений для этой цели , и нужно больше upvotes.docker run --restart=always crmpicco-mysql
и я получил ошибку:Unable to find image 'crmpicco-mysql:latest' locally
.docker run
ожидает имя изображения, которое вы можете просмотреть черезdocker images
.Если вы хотите, чтобы контейнер запускался, даже если ни один пользователь не выполнил вход в систему (например, виртуальная машина VirtualBox, которую я только запускаю и не хочу входить каждый раз). Вот шаги, которые я выполнил для Ubuntu 16.04 LTS. В качестве примера я установил контейнер oracle db:
и добавьте следующий контент:
и включить службу при запуске
Для получения дополнительной информации https://docs.docker.com/engine/admin/host_integration/
источник
docker
выше командуdocker-compose
командой, используя-f
флаг для указания местоположения файла docker-compose:/usr/bin/docker-compose -f /path/to/docker-compose.yml up
docker-compose.yml
указываете.env
файл, используйте--project-directory /path/to
в дополнение к явному указанию вашего файла компоновки докеров.[Unit]
директива под названиемBefore=
. Особенно при запуске таких вещей, как системы управления базами данных, может быть полезно убедиться, что он запускается до определенных других служб.Политика перезапуска по умолчанию -
no
.Для созданных контейнеров используйте
docker update
для обновления политики перезапуска.0576df221c0b
это идентификатор контейнера.источник
always
значит, что контейнер перезапустится, даже если я его остановлю? Конечно, есть способ перезапустить контейнер при перезагрузке без такого постоянного запуска ...If you manually stop a container, its restart policy is ignored until the Docker daemon restarts or the container is manually restarted. This is another attempt to prevent a restart loop.
Вы можете использовать
docker update --restart=on-failure <container ID or name>
.Помимо того, что следует из названия,
on-failure
будет перезапускать контейнер не только в случае сбоя, но и при загрузке системы.Согласно документации , существует несколько вариантов перезапуска:
источник
Более «щадящий» режим из документации:
источник
1) Прежде всего, вы должны включить службу докеров при загрузке
2) Затем, если у вас есть файл docker-compose .yml,
restart: always
или если у вас есть контейнер докера, добавьте restart = always следующим образом:docker run --restart=always
и запустите контейнер докеровУдостовериться
см. эту политику перезапуска на официальной странице Docker
3) Если вы хотите запустить docker-compose, все службы запускаются при перезагрузке системы, поэтому вы запускаете команду ниже только один раз
источник
Вот для чего нужен crontab:
Получите доступ к своему пользовательскому crontab
crontab -e
или покажите егоcrontab -l
или отредактируйте системный crontab по адресу/etc/crontab
источник
Вы можете запустить контейнер, который всегда перезапускается:
Если вы хотите изменить конфигурацию работающего контейнера, вы должны обновить его:
И если вы хотите увидеть текущую политику контейнера, сначала выполните следующую команду перед указанным выше:
В конце концов, не забудьте включить установленный демон docker при загрузке системы :
Чтобы увидеть полный список политик перезапуска, см. Политики перезапуска.
источник
Я хотел добиться запуска контейнера при загрузке в Windows.
Поэтому я просто создал запланированную задачу, которая запускается при загрузке системы. Эта задача просто запускает «Docker для Windows.exe» (или как там называется исполняемый файл вашего докера).
Затем запустятся все контейнеры с политикой перезапуска «всегда».
источник