Сценарий Upstart для запуска контейнера не будет управлять жизненным циклом
У меня есть сценарий выскочки (скажем, /etc/init/dtest.conf
)
start on runlevel [2345]
stop on runlevel [!2345]
respawn
script
DID=$(docker.io run -d ubuntu /bin/bash -c "echo Starting;sleep 20;echo Stopping")
docker.io attach $DID
end script
При выдаче start dtest
, журналы выскочек показывают правильный цикл "запуска ... Остановка " навсегда.
stop dtest
, то он, по-видимому, выйдет правильно, но контейнер будет работать в течение оставшегося времени сна (о чем свидетельствует запуск docker.io ps
каждую секунду).
Разве не должен быть простой способ запустить образ docker в контейнере с upstart и управлять его жизненным циклом там?
Мой идеал сценарий будет примерно таким:
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec docker.io run -d ubuntu /bin/bash -c "echo Starting;sleep 20;echo Stopping"
Среда: это на AWS, используя Ubuntu 14.04 в T2.микро, причем apt-get install -y docker.io
является единственной установленной вещью
1 ответ:
Вы должны создать именованный контейнер, выполнив следующую команду:
docker run --name dtest ubuntu /bin/bash -c "echo Starting;sleep 20;echo Stopping"
Затем создайте следующий сценарий upstart (обратите внимание на флаг
-a
), который будет управлять жизненным циклом этого контейнера, как вы ожидаетеstart on runlevel [2345] stop on runlevel [!2345] respawn script /usr/bin/docker start -a dtest end script
Я бы также предложил добавить флаг
-r
в сценарий выполнения главного демона docker, чтобы docker не перезапускал ваши контейнеры автоматически при перезапуске хоста (вместо этого это будет сделано выскочкой сценарий)sudo sh -c "echo 'DOCKER_OPTS=\"-r=false\"' > /etc/default/docker"
Процесс настройки контейнеров Docker для работы с менеджерами процессов, такими как upstart, описан очень подробно Здесь