Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@dz_

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

More than 3 years have passed since last update.

こんにちは、 @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 の理解が深まりました~(負け惜しみ (/・ω・)/

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
dz_
Nice to meet you! :)

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?