LoginSignup
5

More than 3 years have passed since last update.

docker のネットワーク (docker0) 設定変更 (icc 変更編)

Last updated at Posted at 2020-03-22

本稿では、icc (Inter-Container Communication) を誤って設定してしまった場合に、icc 設定を削除し、ネットワーク設定を変更する方法を記載します。

以前、「docker のネットワーク (docker0) 設定変更 - Qiita」で docker ネットワーク(範囲)変更の方法を書きましたが、Raspbian (buster) の docker-ce では動作が異なり、変更ができませんでした (最悪、systemd による dockerd の起動が失敗し、立ち上がらなくなります)。

調べたところ、これは Raspbian によるものではなく、テストで一時的に icc を設定していたものが残っていたためでした。
しかし、docker で icc=false に設定しても systemd 側にネットワーク設定が残っており、これを削除する必要がありました。

現象

systemctl start docker で起動させようとすると以下のメッセージを出力し、エラー終了する。

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

systemctl status docker.servicejournalctl -xe で参照しても、よくわからず、システムログを参照しました。

/var/log/daemon.log に以下のような記録が出ていました。

/var/log/daemon.log
failed to start daemon: Error initializing network controller: Error creating default "bridge" network: Poo
l overlaps with other one on this address space

各プラットフォームのログの場所とファイル名は「Read the logs - Configure and troubleshoot the Docker daemon | Docker Documentation] に記載があります。

1. dockerd の停止

dockerd を停止します。(念のため、container は事前にすべて停止してください)

systemctl stop docker

2. link デバイスの削除

docker_gwbridge インタフェース(ブリッジ)を削除します。

  • ブリッジインタフェースを確認します。
ip link show
  • ブリッジインタフェースを削除します。
ip link del docker_gwbridge

3. systemd の kv ファイルを削除と systemd のリロード

systemd に残っている Key-Value store の db を削除して、systemd のリロードを行います。

rm /var/lib/docker/network/files/local-kv.db
systemctl daemon-reload

4. dockerd の起動

dockerd の stop から 60秒以上経過していることを確認してください1

必要に応じて、icc や bip などを設定します。

/etc/docker/daemon.json
{
        "icc": false,
        "bip": "172.17.1.254/24"
}

dockerd を起動します。

systemctl start docker

docker_gwbridge が作成されていないことを確認します。

ip addr

または

ip link show

docker 側のネットワークデバイスを確認します。

docker network ls

または

docker network inspect bridge

終了。

さいごに

  • /var/lib/docker/network/files/local-kv.db を削除するのが正しいオペレーションなのかどうか、わかっていません。
  • docker のドキュメントを調べてもなかなか正解が見当たらず、systemd 側を調べて KV store に思い当たり、削除を試みました。
  • systemd の dockerd のインターバル設定に気づかず、すぐに start させてしまうと設定が正しくてもエラーになり、これで時間を費やしました。

  1. dockerd の起動インターバルが 60s に設定されているため、すぐに起動すると、設定が正しくてもエラーになります。 

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
What you can do with signing up
5