Почему Docker-контейнер не запускается при загрузке с помощью сценария upstart в Ubuntu 12.04?

15

Используя инструкции для автоматического запуска Docker на Linode VPS с Ubuntu 12.04 и Docker 0.8.1, указанный контейнер не запускается при перезагрузке.

После загрузки я могу

~$ sudo start [service-name]

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

Разве сценарий в руководстве не предназначен для перезагрузки?

Файл / etc / default / docker содержит одну строку:

DOCKER_OPTS="-r=false"

/etc/init/service-name.conf прямо со страницы докера:

description "service description"                                                                                                            
author "me"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
    # Wait for docker to finish starting up first.
    FILE=/var/run/docker.sock
    while [ ! -e $FILE ] ; do
        inotifywait -t 2 -e create $(dirname $FILE)
    done
    /usr/bin/docker start -a db5e61a9afa8
end script
Джоди
источник
2
Каково содержание вашего сценария upstart и /etc/default/docker?
Бруно Перейра

Ответы:

6

В какой-то момент за последние пару месяцев сценарий upstart в руководстве был изменен, чтобы удалить цикл, ожидающий запуска Docker. Я удалил цикл из своих сценариев выгрузки, и мои контейнеры теперь корректно перезапускаются после перезагрузки.

Мой скрипт /etc/init/service-name.conf теперь выглядит так:

description "service description"                                                                                                            
author "me"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
    /usr/bin/docker start -a db5e61a9afa8
end script

Я не уверен, что случилось с этим циклом. Возможно, это указывало на неправильный файл в моей системе, хотя я не вносил никаких изменений в установку докера по умолчанию. Сейчас я просто рад, что исправление включало удаление кода, а не какой-то сложный обходной путь.

Джоди
источник
Было бы лучше выскочить, чтобы изменить задание докера так, чтобы оно генерировало сигнал (запущенный докером), и чтобы этот сигнал запускал задания контейнера.
MikeyB
Вы не можете остановить контейнер, выполнив команду stop service-name. Я сталкиваюсь с этой проблемой :(
Ахмед Аль Хафуд
3

Для всех, кто использует Ubuntu 14.04, apt-get - разновидность Docker. Вам просто нужно изменить сценарий запуска, чтобы он ожидал «docker.io», а не «docker», вот так:

description "Docker startup script for yum_repo"
author "me"
start on filesystem and started docker.io
stop on runlevel [!2345]
respawn
script
  /usr/local/bin/docker start -a yum_repo_run
end script
falcon006
источник
1

Я использую Ubuntu 13.10 в качестве хоста, и у меня была та же проблема. Я обнаружил, что docker устанавливает сценарий rc для docker /etc/init.d/dockerи одновременно устанавливает сценарий upstart в /etc/init/docker.conf. Я просто должен был удалить скрипт rc, /etc/init.d/dockerчтобы эта проблема исчезла.

Надеюсь, это работает и для вас.

Самер Найк
источник
К сожалению, этот не работал для меня.
Джоди
0
DOCKER_OPTS="-r=false"

Это означает: не перезапускать ранее запущенные контейнеры.

Удалите -rпараметр или измените его на true.

MikeyB
источник
2
Правильно, но дело в том, чтобы перезапуск контейнера дескриптора дескриптора, а не демон докера. Если демон docker запускает контейнер при перезагрузке, процессом upstart нельзя управлять.
Джоди
0

/var/run/docker.sockэто сокет, поэтому вы должны использовать -Sпри тестировании на существование:

FILE=/var/run/docker.sock
while [ ! -S $FILE ] ; do
    inotifywait -t 2 -e create $(dirname $FILE)
done
j.szwedko
источник