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
オペレーティングシステム:Ubuntu 20.04.4
BindsTo =、PartOf =、Requires =を試しましたが、インターネット上で読んだように、snap.docker.dockerdが停止しているときに実際にサービスを開始するのに役立ちません。
だから私の質問は:スナップが終了したときにサービスを開始し、ドッカーサービスを開始するにはどうすればよいですか?
docker compose up -d
2番目の考えは、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