LoginSignup
5
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 に設定されているため、すぐに起動すると、設定が正しくてもエラーになります。 

5
5
0

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
5
5