Dockerコンテナから外部へ通信できなかったときの対応

 Dockerコンテナを普通にrunしたときに外部につながらない (pingが通らない、wgetが使えない)ということがありまして。その対応。

スポンサーリンク

対応方法

Dockerホスト (VirtualBoxのほうで、Dockerが動いている仮想マシン)のコンソールから、
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE

とする。
 つまりNATでLAN内から外部へ通信するときの設定をいれてやる感じです。

 Dockerはコンテナのホストになっている仮想環境の内部的にLANが組まれているような状態で、つまりこのDockerホストがルータの役割になっていたのですが、これが外部との通信がうまくできるようになっていませんでした。のでiptablesの設定をしてやったらうまく通信できるようになりました。
 
 でも別の環境でははじめから普通に外部通信出来ていたので、何かの拍子に設定を壊してしまってただけかもしれない…?
 Windowsだと、DockerホストがVirtualBox上に作られているからさらにややこいかもしれませんですね…
 
 Dockerコンテナからのネットワーク通信がおかしくなっていたら、コンテナだけじゃなくてそれを実行している仮想環境のほうも確認してみるといいかもしれません。
スポンサーリンク

シェアする

スポンサーリンク