Systemd 단위로 Docker-compose

Systemd 단위로 Docker-compose

docker-compose주어진 컨테이너 세트를 시작하고 중지하는 명령을 사용하는 시스템 장치가 있습니다 . 다음과 같습니다.

[Unit]
Description=...

[Service]

WorkingDirectory=/opt/tsc-docker

RemainAfterExit=true
ExecStart=/usr/bin/docker-compose up -d --remove-orphans
ExecStop=/usr/bin/docker-compose down
Type=oneshot

[Install]
WantedBy=multi-user.target

기본적으로 예상대로 작동합니다. 이 서비스를 시작하면 컨테이너가 시작되고, 중지하면 컨테이너가 종료됩니다.

누락된 것은 특정 컨테이너(및 이 질문의 의미)만 다시 시작하는 기능입니다.

즉, 명령을 편집 docker-compose.yml하고 실행 하면 docker-compose up -d모든 컨테이너가 아닌 영향을 받은 컨테이너만 다시 생성됩니다.

systemctl start TscDocker그러나 현재 장치 구성으로 는 영향을 받은 컨테이너를 다시 실행하고 다시 생성 할 수 없습니다 . 장치가 이미 실행 중이므로 내 명령을 무시합니다. 을 설정하면 RemainAfterExit=false명령 ExecStop이 이후에 실행되는데 ExecStart이는 분명히 바람직하지 않습니다.

나에게 필요한 것은 서비스를 여러 번 시작할 수 있고 매번 실행될 때 ExecStart마다 실행 되도록 하는 것입니다 .ExecStopExecStart

모든 조건을 충족하는 구성을 만들려면 어떤 옵션이 있어야 합니까?

답변1

중단할 수 없는 일회성 서비스를 사용하고 싶은 것 같습니다. 다음과 같습니다.

[Unit]
Description=...

[Service]

WorkingDirectory=/opt/tsc-docker

RemainAfterExit=false
ExecStart=/usr/bin/docker-compose up -d --remove-orphans
Type=oneshot

[Install]
WantedBy=multi-user.target

ExecStart 실행이 완료되면 서비스가 비활성 상태로 돌아가기 때문에 이렇게 하면 서비스를 여러 번 시작할 수 있습니다. 이 사실을 다루는 것이 옳은 일입니다.systemd의 맨페이지로지정하다중지 가능한 일회성 서비스에서는 여러 시작 명령을 실행할 수 없습니다.

ExecStop을 계속 사용할 수 있는 더러운 해결 방법은 아래와 같이 ExecReload 함수를 사용하는 것일 수 있습니다.

[Unit]
Description=...

[Service]

WorkingDirectory=/opt/tsc-docker

RemainAfterExit=true
ExecStart=/usr/bin/docker-compose up -d --remove-orphans
ExecReload=/usr/bin/docker-compose up -d --remove-orphans
ExecStop=/usr/bin/docker-compose down
Type=oneshot

[Install]
WantedBy=multi-user.target

이는 서비스가 여전히 활성 상태인 것으로 간주되는 동안 별도의 명령을 실행할 수 있는 유일한 방법이기 때문입니다. 그런 다음 사용할 수 있습니다

 systemctl reload TscDocker

관련 정보