우분투 15.04에서 systemd로 docker-compose 시작


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

(위에서 여기에 적응 )

그러나 지금 우분투 15.04를 실행하는 도커 호스트에서 실행 중이며 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 서비스마다 하나의 시스템 서비스를 만듭니다.

docker-compose 종속성을 제거하기 위해 docker-compose 파일을 여러 시스템 서비스 파일로 변환하는 것을 고려할 수 있습니다. http://container-transform.readthedocs.org/ 이 방법을 사용했는데 간단한 설정에 적합합니다.


1
답변에 링크의 일부 추가 정보를 넣고 싶을 수 있습니다. 링크는 시간이 지나면 작동하지 않는 경향이 있습니다.
Dennis Nolte

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를 사용해야한다고 생각합니다. 파일을 .env의로드 고정 표시기-작성 사용 현재 작업 디렉토리 WORKINGDIRECTORY = / 프로젝트 / my_server가도 ExecStart = / usr / 지방 / 빈 / 고정 표시기-작성까지
Mohammadalijf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.