ubuntu 15.04でsystemdを使用してdocker-composeを開始する


10

systemdで制御したいdocker-composeプロジェクトがあります。新興企業では、次のようなスクリプトを使用します。

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

(上記からここに適応)

ただし、私は現在、systemdに切り替えられたUbuntu 15.04を実行するDockerホストで実行しています。上記をsystemdサービススクリプトとして実行するにはどうすればよいですか?docker-composeデーモンを起動するだけでは、障害が発生した場合に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/。しかし、さらに彼は各docker-composeサービスに対して1つのsystemdサービスを作成します。

:あなたは、依存関係ドッキングウィンドウ-コンを取り除くために、複数にsystemdサービスファイルにあなたのドッキングウィンドウ・コンファイルを変換するために考えるかもしれませんhttp://container-transform.readthedocs.org/ 私はそれが簡単なセットアップのために罰金を動作しますが、そのアプローチを使用していました。


1
リンクからいくつかの追加情報を回答に含めることができます。しばらくするとリンクが機能しなくなる傾向があります。
Dennis Nolte

1
確かに、リンクはもう機能しません^^。
christophe31 2016

ここで最初のブログ投稿にインターネットアーカイブのリンクです: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= / projects / my_serverもExecStart = / usr / local / bin / docker-compose up
Mohammadalijf
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.