Запуск докер-композиції з systemd на ubuntu 15.04


10

У мене є проект док-композиції, який я хотів би контролювати через systemd. На початку я б використав сценарій, який виглядає приблизно так:

description "Start/Stop server"
author "Jim Cortez"

start on filesystem and started docker
stop on runlevel [!2345]

respawn limit 3 240

pre-start script
    # wait (if necessary) for our docker context to be accessible
    while [ ! -f /projects/my_server/docker-compose.yml ]
    do
      sleep 1
    done
    /usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml up -d
end script

script
    sleepWhileAppIsUp(){
        while docker ps | grep "$1" >/dev/null; do
            sleep 2
        done
    }

    sleepWhileAppIsUp "my_server"
end script

# stop docker container after the stop event has completed
post-stop script
    if docker ps | grep my_server;
    then
        /usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml stop
    fi
end script

(вище адаптовано звідси )

Однак я зараз працюю на хості докера, який працює з Ubuntu 15.04, який перейшов на systemd. Як я можу зробити вищезазначене як сценарій системної служби? Просто запуск демон-композиційного докера не дозволить systemd відстежувати та перезавантажуватись у разі відмови.

Ось що я маю досі:

[Unit]
Description=My Server container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml up -d
ExecStop=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml stop

[Install]
WantedBy=local.target

Відповіді:


11

Я пропоную видалити -dваріант. У цьому випадку вам не потрібно запускати контейнери у фоновому режимі.


6

Я виявив, що: Автор використовує подібний підхід, як і ви http://trackless.ca/2015/12/21/docker-compose-meets-systemd/ . Крім того, він створює одну системну службу для кожної послуги докер-композиту.

Ви можете розглянути можливість перетворення файлу докер-композиції в декілька системних файлів служби, щоб позбутися залежності від докер-композиції: http://container-transform.readthedocs.org/ Я використовував такий підхід, він працює чудово для простих налаштувань.


1
можливо, ви захочете ввести у відповідь деяку додаткову інформацію із посилань, через деякий час посилання не працюють.
Денніс Нолте

1
дійсно, посилання більше не працює ^^.
christophe31

Ось посилання в Інтернет-архіві до першого повідомлення в блозі: web.archive.org/web/20161105135126/http://trackless.ca/2015/12/…
pdoherty926

0

Спробуйте це, я виявив у своєму тесті, для запуску чи зупинки потрібен більше часу, ніж звичайне обслуговування.

[Unit]
Description=My Server container
Requires=docker.service
After=network.target docker.service

[Service]
#Restart=always
Type=simple
WorkingDirectory=/projects/my_server
ExecStart=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml down

[Install]
WantedBy=multi-user.target

1
Я думаю, вам слід використовувати WorkingDirectory. docker-compose використовувати поточний робочий каталог для завантаження файлів .env WorkingDirectory = / Проекти / my_server також ExecStart = / usr / local / bin / docker-compose up
Mohammadalijf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.