11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Check! systemd 起動の docker で、 daemon.json の hosts を指定するとエラーになるのを解消する

Last updated at Posted at 2017-11-15

こんにちは、 @dz_ こと大平かづみです。

Prologue - はじめに

Docker を systemctl(sytemd) で起動してる場合に陥ったエラーの解決メモです。

Docker デーモンの設定は daemon.json に書くのですが、そこで hosts を指定すると以下のようにエラーになってしまいました。どうやら、 docker.service の起動スクリプトとコンフリクトしてるみたいです。今回はそれを回避した tips を書き留めました。

正攻法かわからないのですが、何かの参考になれば幸いです…!(ご参考の際は、ご自身の判断でお願いいたします。)

エラーの様子
# daemon.json の hosts を設定して~、
sudo vi /etc/docker/daemon.json

# docker をリスタートするも、エラー… (´・ω・`)
sudo systemctl restart docker

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

参考

手順

docker.service の設定を確認する

まず、 docker.service の場所を確認します。

# ロードされている docker.service の場所を確認する
sudo systemctl status docker | grep Loaded

   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)

この docker.serviceExecStart を上書きするので、現在の設定値を確認しておきましょう。

[Service] > ExecStart には、 dockerd-H(ホストを指定するオプション)付きで指定されています。

# ExecStart を確認する(前5行も合わせて表示)
cat /lib/systemd/system/docker.service | grep -B 5 ExecStart

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd://

docker.service の設定を上書きする

それでは docker.service の drop-in ファイルを編集します。( nano で開かれます。)

# drop-in の上書き用ファイルを編集する
sudo systemctl edit docker.service

以下のように記入します。 ExecStart には、 -H オプションを除いた dockerd だけを指定します。

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
  • ※1 ExecStart は、最初の ExecStart= を書くことで値を上書きできるそうです。
  • ※2 この設定は、 /etc/systemd/system/docker.service.d/override.conf に保存されます。

編集し終えたら、 systemctl に設定をリロードしておきます。

# 編集した *.service ファイルをリロードする
sudo systemctl daemon-reload

daemon.json を編集する

それから、 daemon.json を開き、適宜編集します。 hosts には、上記で消した fd:// を追記します。

sudo vi /etc/docker/daemon.json
{
  ...

  "hosts": [
    "tcp://<sample ip address>:2375",
    "fd://"
  ],

  ...
}

docker をリスタートする

daemon.json の編集が終わったら、 docker をリスタートしてみましょう~

# docker をリスタートする
sudo systemctl restart docker

これで、エラーなくリロードされ、指定したホストを listen していれば大丈夫だと思います。

# docker の状態を確認する
$ sudo systemctl status docker | grep listen
Nov 15 12:56:41 xxx dockerd[51426]: time="2017-11-15T12:56:41.875937579+09:00" level=info msg="API listen on /var/run/docker.sock"
Nov 15 12:56:41 xxx dockerd[51426]: time="2017-11-15T12:56:41.876027580+09:00" level=info msg="API listen on <sample ip address>:2375"

以上です!

備考

トラブルシューティング

docker をリスタートしたとき、以下のようなエラー(最下段)が出た場合は、上記の docker.service.d/override.conf を見直してみてください。※1 の
ExecStart= が必要です。

sudo systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: error (Reason: Invalid argument)
  Drop-In: /lib/systemd/system/docker.service.d
           └─exec-start.conf
   Active: active (running) since Wed 2017-11-15 15:43:41 JST; 10min ago
     Docs: https://docs.docker.com
 Main PID: 49176 (dockerd)
   CGroup: /system.slice/docker.service
           ├─49176 /usr/bin/dockerd -H fd://

...

Nov 15 15:43:41 xxx systemd[1]: Started Docker Application Container Engine.
Nov 15 15:53:36 xxx systemd[1]: docker.service: Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.

謝辞

systemd の drop-in について、コメント欄で @yuanying さんが教えてくださいました!ありがとうござます!

また、これらの systemd の設定の上書きについては、こちらのページを参考にしました!ありがとうございます!

Prologue - おわりに

このおかげで、Docker の理解が深まりました~(負け惜しみ (/・ω・)/

11
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?