web-dev-qa-db-ja.com

DockerデーモンがCoreOSの起動時に起動しない

CoreOS(835.9.0)のVanillaインストールがあり、起動時にdockerデーモンを起動しません。 SSHを使用してdocker psなどを実行したときにのみ開始されます。

システムの起動時にdockerデーモンを自動的に起動させるにはどうすればよいですか?

Dockerデーモンと言うとき、ps -ef | grep dockerは、docker psを実行するまでプロセスが表示されないことを意味します

26
Chris

Sudo systemctl enable dockerトリックを行いました。

45
Chris

これは少し古いですが、すべての新しいサーバーでcloud-initを使用してこれを開始しました。すべてのサーバーで使用する保存済みのcloud-initスクリプトがあります。その一部が含まれています:

#cloud-config
coreos:
  units:
    - name: "docker.service"
      command: "start"
      enable: true

これにより、Dockerサービスが有効になり、最初の起動時に起動されます。

6
captncraig

このコメント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のドキュメント を参照してください。

2
Neograph734

私は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が明らかに多くのことをしようとしていて、惨めに失敗したという、ある種の群れのような状況を引き起こしたようです。私はこれがそこのコメントで言及された「ブートチェーンをブロックする」動作であると思います。

1
Colin Dunklau