回答:
sudo systemctl enable docker
トリックをしました。
Robによるこのコメントで既に説明したように、Dockerはソケットによってアクティブ化されます。つまり、呼び出されない限り、デーモンは起動しません。ここでの既存の回答は機能しますが、CoreOSは別のアプローチを推奨します。
CoreOSのドキュメントによると、これを行うための推奨される方法は、Dockerサービスを必要とする独自のアプリのサービスを作成することです。
/etc/systemd/system/myapp.service:
[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 "trap 'exit 0' INT TERM; while true; do echo Hello World; sleep 1; done"
[Install]
WantedBy=multi-user.target
代わりにそのサービスを自動的に開始します:
$ sudo systemctl enable /etc/systemd/system/myapp.service
$ sudo systemctl start hello.service
ユースケースの例は、サービスが開始されるとコンテナーを最新バージョンに更新することであり、高度な例ではetcdにサービスも登録します。背景情報の詳細については、CoreOSのドキュメントを参照してください。
私はDocker Swarmを使用しているため、systemdが特定のアプリを担当する必要はありません...起動時に起動するにはdockerが必要です。これが私が解決した解決策です。
これを入れてください/etc/systemd/system/poke-docker.service
:
[Unit]
After=default.target
[Service]
Type=oneshot
ExecStart=/usr/bin/docker version
RemainAfterExit=yes
[Install]
WantedBy=default.target
そしてsystemctl enable poke-docker
、起動シーケンスの終わり近くで、各ブートでトリガーするようにセットアップするだけです。このdocker version
コマンドは、Dockerデーモンと通信して、ソケットをトリガーし、Dockerサービス自体を開始します。
私systemctl enable docker
は他の答えでトリックを試しましたが、最初はうまくいきましたが、ドッカーが明らかに多くのことをしようとして悲惨に失敗するような雷の群れの状況を引き起こしたようです。これは、コメントに記載されている「ブートチェーンのブロック」動作であると思われます。