従業員システムガイドこのサンプル構成に問題があります。
[Unit]
Description=MyApp
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox1
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/sh -c "while true; do echo Hello World; sleep 1; done"
[Install]
WantedBy=multi-user.target
システムの実行中に "systemctl start hello"を実行するとdockerが起動しますが、起動時にsystemdから起動するように "hello.service"を有効にしてコンピュータを再起動すると、次のエラーが発生します。
-- Reboot --
Mar 15 01:17:44 general systemd[1]: Starting MyApp...
Mar 15 01:17:47 general docker[510]: Error response from daemon: No such container: busybox1
Mar 15 01:17:47 general docker[510]: time="2015-03-15T01:17:47Z" level="fatal" msg="Error: failed to kill one or more containers"
Mar 15 01:17:47 general docker[637]: Error response from daemon: No such container: busybox1
Mar 15 01:17:47 general docker[637]: time="2015-03-15T01:17:47Z" level="fatal" msg="Error: failed to remove one or more containers"
Mar 15 01:17:47 general systemd[1]: hello.service: control process exited, code=exited status=1
Mar 15 01:17:47 general systemd[1]: Failed to start MyApp.
Mar 15 01:17:47 general systemd[1]: Unit hello.service entered failed state.
Mar 15 01:17:47 general systemd[1]: hello.service failed.
Mar 15 01:17:47 general docker[673]: Pulling repository busybox
Mar 15 01:17:47 general docker[673]: time="2015-03-15T01:17:47Z" level="fatal" msg="Get https://index.docker.io/v1/repositories/library/busybox/images: dial tcp: lookup index.docker.io: connection refused"
私が間違っていることを知っていますか?
答え1
起動時に実行するには、このnetwork-online.target
サービスを使用する必要があります。このコマンドを実行する前に、ネットワークが動作していることを確認する必要がありますdocker pull
。望むより」ネットワーク接続後のサービスの実行「詳しくはsystemdのドキュメントをご覧ください。
以下は私にとって効果的でした。
[Unit]
Description=MyApp
Requires=docker.service network-online.target
After=docker.service network-online.target
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox1
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/sh -c "while true; do echo Hello World; sleep 1; done"
[Install]
WantedBy=multi-user.target
答え2
私は提供されたことを試みました:
Requires=docker.service network-online.target
After=docker.service network-online.target
しかし、それはうまくいきませんでした。私は持っています:
-- Reboot --
Feb 09 23:20:24 coreos-512mb-fra1-01 systemd[1]: Starting New Relic Linux Server Monitor (nrsysmond)...
Feb 09 23:20:24 coreos-512mb-fra1-01 docker[782]: Failed to kill container (nrsysmond): Error response from daemon: Cannot kill container nrsysmond: Container c608c10f44c06c550492e872773b0d5a59a7b86e639f63487f6186983a4f786b is not running
Feb 09 23:20:25 coreos-512mb-fra1-01 docker[787]: nrsysmond
Feb 09 23:20:25 coreos-512mb-fra1-01 docker[794]: Pulling repository docker.io/newrelic/nrsysmond
Feb 09 23:20:25 coreos-512mb-fra1-01 docker[794]: Error while pulling image: Get https://index.docker.io/v1/repositories/newrelic/nrsysmond/images: dial tcp: lookup index.docker.io: Temporary failure in name resolution
Feb 09 23:20:25 coreos-512mb-fra1-01 systemd[1]: newrelic.service: Control process exited, code=exited status=1
Feb 09 23:20:25 coreos-512mb-fra1-01 systemd[1]: Failed to start New Relic Linux Server Monitor (nrsysmond).
Feb 09 23:20:25 coreos-512mb-fra1-01 systemd[1]: newrelic.service: Unit entered failed state.
Feb 09 23:20:25 coreos-512mb-fra1-01 systemd[1]: newrelic.service: Failed with result 'exit-code'.
問題の追加Restart
とRestartSec
修正:
# Restart after crash
Restart=always
# Give the service 10 seconds to recover after the previous restart
RestartSec=10s
エレガントではありませんが、動作します。ログは次のとおりです。
Feb 09 23:23:57 coreos-512mb-fra1-01 systemd[1]: Starting New Relic Linux Server Monitor (nrsysmond)...
Feb 09 23:23:57 coreos-512mb-fra1-01 docker[792]: Failed to kill container (nrsysmond): Error response from daemon: Cannot kill container nrsysmond: Container 31fb78809
Feb 09 23:23:57 coreos-512mb-fra1-01 docker[797]: nrsysmond
Feb 09 23:23:57 coreos-512mb-fra1-01 docker[804]: Pulling repository docker.io/newrelic/nrsysmond
Feb 09 23:23:57 coreos-512mb-fra1-01 docker[804]: Error while pulling image: Get https://index.docker.io/v1/repositories/newrelic/nrsysmond/images: dial tcp: lookup ind
Feb 09 23:23:57 coreos-512mb-fra1-01 systemd[1]: newrelic.service: Control process exited, code=exited status=1
Feb 09 23:23:57 coreos-512mb-fra1-01 systemd[1]: Failed to start New Relic Linux Server Monitor (nrsysmond).
Feb 09 23:23:57 coreos-512mb-fra1-01 systemd[1]: newrelic.service: Unit entered failed state.
Feb 09 23:23:57 coreos-512mb-fra1-01 systemd[1]: newrelic.service: Failed with result 'exit-code'.
Feb 09 23:24:08 coreos-512mb-fra1-01 systemd[1]: newrelic.service: Service hold-off time over, scheduling restart.
Feb 09 23:24:08 coreos-512mb-fra1-01 systemd[1]: Stopped New Relic Linux Server Monitor (nrsysmond).
Feb 09 23:24:08 coreos-512mb-fra1-01 systemd[1]: Starting New Relic Linux Server Monitor (nrsysmond)...
Feb 09 23:24:08 coreos-512mb-fra1-01 docker[869]: Failed to kill container (nrsysmond): Error response from daemon: Cannot kill container nrsysmond: No such container:
Feb 09 23:24:08 coreos-512mb-fra1-01 docker[875]: Failed to remove container (nrsysmond): Error response from daemon: No such container: nrsysmond
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: latest: Pulling from newrelic/nrsysmond
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: 6ffe5d2d6a97: Already exists
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: f4e00f994fd4: Already exists
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: e99f3d1fc87b: Already exists
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: a3ed95caeb02: Already exists
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: a3ed95caeb02: Already exists
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: 65cdb07f703d: Already exists
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: a3ed95caeb02: Already exists
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: Digest: sha256:c184f97452321baa0b0ee4ee402e3aaa204f041beb7a71a347db6c4efecba07f
Feb 09 23:24:10 coreos-512mb-fra1-01 docker[883]: Status: Image is up to date for newrelic/nrsysmond:latest
Feb 09 23:24:10 coreos-512mb-fra1-01 systemd[1]: Started New Relic Linux Server Monitor (nrsysmond).
DigitalOcean CoreOSでこの問題が発生したため、そのリソースでヘルプが見つかりました。一つあるワイヤーこの質問に関連しています。これは次のように提案します。
After=early-docker.service systemd-networkd-wait-online.service
Requires=early-docker.service systemd-networkd-wait-online.service
Before=early-docker.target
ただし、これらの行はDockerを中断/停止します。私のサービスに関連するすべてのプロセスを終了し、Dockerサービスを再起動して再応答する必要がありました。
ドッカーバージョン:
docker -v
Docker version 1.10.0, build e21da33