Ubuntu'da systemd ile docker-compose uygulamasını başlatma 15.04


10

Systemd ile kontrol etmek istediğim bir docker-compose projem var. Uptart, ben şöyle bir komut dosyası kullanırdım:

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

(yukarıda uyarlanmıştır burada )

Ancak, şimdi sistemd'ye geçiş Ubuntu 15.04 çalıştıran bir docker ana bilgisayar üzerinde çalışıyorum. Yukarıdakileri systemd servis betiği olarak nasıl yapabilirim? Docker-compose arka plan programının başlatılması, systemd'nin arıza durumunda izlemesine ve yeniden başlamasına izin vermez.

Şimdiye kadar sahip olduğum şey:

[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

Yanıtlar:


11

-dSeçeneği kaldırmanızı öneririm . Bu durumda kapları arka planda çalıştırmanıza gerek yoktur.


6

Bunu buldum: Yazar, http://trackless.ca/2015/12/21/docker-compose-meets-systemd/ ile benzer bir yaklaşım kullanıyor . Ancak ek olarak her liman işçiliği oluşturma hizmeti için bir systemd hizmeti oluşturur.

Docker-compose bağımlılığından kurtulmak için docker-compose dosyanızı birden fazla systemd hizmet dosyasına dönüştürmeyi düşünebilirsiniz: http://container-transform.readthedocs.org/ Bu yaklaşımı kullandım, basit kurulumlar için iyi çalışıyor.


1
cevabınızdaki bağlantılardan bazı ek bilgiler koymak isteyebilirsiniz, bağlantılar bir süre sonra işe yaramıyor.
Dennis Nolte

1
gerçekten, bağlantı artık çalışmıyor ^^.
christophe31

İşte ilk blog yazısına
pdoherty926 9:17

0

Bunu deneyin, testimde buldum, başlatmak veya durdurmak için normal hizmetten daha fazla zaman gerekiyor.

[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
Ben WorkingDirectory kullanmak gerektiğini düşünüyorum. docker-compose .env dosyalarını yüklemek için geçerli çalışma dizinini kullanır WorkingDirectory = / projects / my_server ayrıca ExecStart = / usr / local / bin / docker-compose up
Mohammadalijf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.