/
カテゴリー

概要

HostAにDockerをインストールした所、HostBとうまく通信できなくなった。原因を究明してHostAからHostBにsshができるようにしてほしい。

前提条件

  • Dockerを停止させない 最終的にDockerが起動している状態にする
  • HostA上のルーティングの設定を変更しない

初期状態

HostAからHostBにsshしようとするとうまくできない。

終了状態

原因を究明し、HostAからHostBにsshができるようになる。

解説

この問題は、Dockerインストール時に生成されるインターフェースであるdocker0 のIPアドレスがHostBと被ってしまうため期待通りの通信ができなくなったという問題でした。

原因特定の方法としては、ip route を実行してHostAのルーティングテーブルを確認をする方法などがあげられます。

解決方法は、damon.json に bipオプションを追記してネットワーク・ブリッジ IP の指定をした後にDockerを再起動することで問題を解決することができます。

/etc/docker/daemon.json

{
  "bip":"10.255.255.1/24" ←172.17.0.1から外れるように書いてあれば何でも良い
}

dockerの再起動

sudo systemctl restart docker

講評

かなり正当数の多い問題でした。
別解として/lib/systemd/system/docker.service を編集してオプション指定している方がいました。
こちらは前提条件に抵触しておらず問題解決もできていたため完答扱いになりました。