Snap을 사용하여 Docker를 설치했습니다. snap이 docker를 업데이트할 때마다 snap.docker.dockerd(기본값) 서비스가 중지되었다가 일정 시간 후에 시작됩니다. docker-compose 애플리케이션이 실행 중이므로 애플리케이션을 업데이트할 때마다 충돌이 발생합니다.
오류로 인해 Docker Compose를 다시 시작하는 옵션이 작동하지 않습니다(https://github.com/docker/for-win/issues/584)
그래서 내가 볼 수 있는 유일한 옵션은 systemd 서비스를 사용하는 것입니다. 이것은 (/etc/systemd/system/docker-compose-chebur.service)입니다:
[Unit]
Description=Docker Compose Chebur
Requires=snap.docker.dockerd.service
PartOf=snap.docker.dockerd.service
After=snap.docker.dockerd.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/maybephilipp/projects/chebur-docker
User=maybephilipp
Group=docker
ExecStartPre=/usr/bin/sleep 3
ExecStart=/snap/bin/docker compose -f chebur.docker-compose.yml up -d
ExecStop=/snap/bin/docker compose -f chebur.docker-compose.yml down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
운영 체제: 우분투 20.04.4
BindsTo=, PartOf=, Requires=를 시도했지만 인터넷에서 읽은 것처럼 snap.docker.dockerd가 중지된 상태에서 시작될 때 실제로 서비스를 시작하는 데 도움이 되지 않습니다.
그래서 제 질문은: 스냅이 종료될 때 서비스를 시작하고 도커 서비스를 시작하려면 어떻게 해야 합니까?
docker compose up -d
두 번째 생각은 5분 이하마다 실행되는 크론 탭을 만드는 것이었습니다 . 그런데 더러워 보이네요 :(
답변1
섹션을 다음으로 변경하고 싶습니다 [Install]
.
[Install]
WantedBy=multi-user.target
WantedBy=snap.docker.dockerd.service
그런 다음 다시 실행하십시오 systemctl enable docker-compose-chebur.service
.
당신은 게임을 하고 Requires=
있고 BindsTo=
거의 올바른 생각을 가지고 있지만 잘못된 방향으로 가고 있습니다. 계속 " docker-compose-chebur.service
시작하면 나도 시작하겠다 snap.docker.dockerd.service
"고 하더군요. 그러나 " snap.docker.dockerd.service
시작할 때 시작됩니다 " 라는 반대가 필요합니다 . 따라서 , 를 docker-compose-chebur.service
추가해야 합니다 . 이 서비스만 수정할 수 있는 경우 , 의 반대 는 , 섹션에서만 설정할 수 있습니다 . or 섹션 에 설정하는 것이 일반적이므로 일반적으로 잘못되었지만 필요한 경우 직접 삽입하여 수행할 수 있습니다.Wants=
Requires=
BindsTo=
snap.docker.dockerd.service
Wants=
Requires=
WantedBy=
RequiredBy=
[Install]
BoundBy=
[Unit]
[Install]
이는 정의한 모든 관계에 대한 설명입니다. 어쩌면 모두 필요하지 않을 수도 있습니다.
Requires=A.service
: 이것이 시작되면,A.service
또한 시작됩니다.After=
설정되어 있고 시작할A.service
수 없으면 시작되지 않습니다.PartOf=A.service
:A.service
정지/재기동 시에도 정지/재기동됩니다.After=A.service
: 바라보다Requires=
WantedBy=A.service
:A.service
시작되면 이것도 시작하세요.RequiredBy=
which 와 달리Requires=
성공 확인을 건너뜁니다.
snap.docker.dockerd.service
귀하의 경우에는 이미 있는지 확인하겠습니다 WantedBy=multi-user.target
. 그렇다면 그 줄을 넣고 [Install]
간단히 갖겠습니다 WantedBy=snap.docker.dockerd.service
.
인용하다: https://www.freedesktop.org/software/systemd/man/systemd.unit.html