CoreOS(835.9.0)のVanillaインストールがあり、起動時にdockerデーモンを起動しません。 SSHを使用してdocker ps
などを実行したときにのみ開始されます。
システムの起動時にdockerデーモンを自動的に起動させるにはどうすればよいですか?
Dockerデーモンと言うとき、ps -ef | grep docker
は、docker ps
を実行するまでプロセスが表示されないことを意味します
Sudo systemctl enable docker
トリックを行いました。
これは少し古いですが、すべての新しいサーバーでcloud-initを使用してこれを開始しました。すべてのサーバーで使用する保存済みのcloud-initスクリプトがあります。その一部が含まれています:
#cloud-config
coreos:
units:
- name: "docker.service"
command: "start"
enable: true
これにより、Dockerサービスが有効になり、最初の起動時に起動されます。
このコメントRob ですでに説明したように、ドッカーはソケットでアクティブ化されます。つまり、呼び出されない限りデーモンは起動しません。ここでの既存の回答は機能しますが、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
もう1つの答えはトリックです。最初は機能していましたが、Dockerが明らかに多くのことをしようとしていて、惨めに失敗したという、ある種の群れのような状況を引き起こしたようです。私はこれがそこのコメントで言及された「ブートチェーンをブロックする」動作であると思います。