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


47

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


какую версию Ubuntu вы используете?
— Maythux

использование сервера Ubuntu 14.04
— Nayan Tiwari

Это было задано на ServerFault .
— Дан Даскалеску

Crossposted. Пожалуйста, выберите один сайт, а не много, для публикации на.
— Томас Уорд

Ответы:


35

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

sudo docker run --restart=always -d your_image

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


По мере того, как я об этом разбираюсь, есть некоторые инструменты автоматизации, такие как 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 - запускать контейнеры автоматически


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 Довольно симпатичный конфиг :)


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 для автоматического создания сценариев запуска, которые являются более полными (запуск, остановка, перезапуск, очистка параметров ...)


1
выскочка мертва. используйте systemd.
— Амир Хоссейн
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.