Как автоматически запустить Docker-контейнер при перезагрузке системы?

47

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

найан тивари
источник
какую версию Ubuntu вы используете?
Maythux
использование сервера Ubuntu 14.04
Nayan Tiwari
Это было задано на ServerFault .
Дан Даскалеску
Crossposted. Пожалуйста, выберите один сайт, а не много, для публикации на.
Томас Уорд

Ответы:

35

До сих пор я не думаю, что есть способ сделать это нормально. Хитрое решение заключается в использовании политики перезагрузки

sudo docker run --restart=always -d your_image

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

Maythux
источник
По мере того, как я об этом разбираюсь, есть некоторые инструменты автоматизации, такие как chef, но я не знаю, как их использовать
Наян Тивари
Это все еще экспериментально для Ubuntu github.com/bflad/chef-docker/blob/master/README.md
Maythux
2
Почему бы не использовать системные возможности для этого? и upstart, и systemd могут отлично с этим
справиться
29

Это очень распространенный вариант использования для добавления политики перезапуска в существующий контейнер.

Это можно сделать с помощью следующей команды: docker update --restart {no,on-failure,unless-stopped,always} container_name

Подробнее: Docker - запускать контейнеры автоматически

SlimIT
источник
2
Это решило мою проблему отлично! У меня был контейнер с моей базой данных, и я хотел, чтобы он запустился, когда запустился мой Mac. Указав, что его изображение всегда было перезапущено (если не остановлено), это добилось цели!
Колин
21

Поскольку ubuntu 15 теперь поддерживает systemd, пример для этого менеджера:

someservicename.service

[Unit]
Description=Some service
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a container_name
ExecStop=/usr/bin/docker stop -t 2 container_name

[Install]
WantedBy=multi-user.target

Больше доступно на сайте докера

PS Довольно симпатичный конфиг :)

Reishin
источник
4

Я использовал файлы Upstart.

Вы можете найти некоторые примеры и другие решения на веб-сайте Docker .

Создайте такой файл в / etc / init:

Description "My container"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
   /usr/bin/docker start -a mycontainer
end script
pre-stop script
  /usr/bin/docker stop mycontainer
end script

Обратите внимание, что начиная с Docker 1.2, существуют политики перезапуска, которые также могут помочь автоматически перезапускать контейнеры при запуске службы Docker (например, после загрузки).

Personnaly, я использую puppet для подготовки своей рабочей станции и использую этот модуль Docker для автоматического создания сценариев запуска, которые являются более полными (запуск, остановка, перезапуск, очистка параметров ...)

aklmie
источник
1
выскочка мертва. используйте systemd.
Амир Хоссейн