Dockerコンテナのポートを後から解放する方法

シェアする

ヨメレバCSS

 Dockerコンテナをrunで一度作ってしまった後に、それのポートを変更する話です。

スポンサーリンク
GoogleAdSence レクタングル(大)

Dockerホストでポートフォワーディングする

 Dockerコンテナはホスト内部でLANが組まれているような状態なので、単純にポートフォワードの設定をしてやればいいです。

 Windowsの場合はVirtualBoxのコンソールからになります。

 例えば172.16.0.2に向かって6006ポートを開けたいときは、

とします。

 これで、ブラウザから http://192.168.99.100:6006/としてやると繋がります。

 この192.168.99.100はWindowsの場合、Dockerホストが実行されているVMに設定されているIPで、VMのコンソールからifconfig eth1としてやるとついていることがわかります。

LinuxでDockerを設定してる場合は普通にhttp://localhost:6006/とかでいいと思います。

参考

## docker で後からポートを公開する docker run したときに -p を忘れたり後から公開の必要ができた場合には ``` iptables -t nat -A DOCKER ! -i docker0 -p tcp ...
久々にdockerを触ると毎回やってしまうウッカリがあるので、自戒のためメモ。 まずは試しにnginxを立ち上げる。 ``` $ docker run -dit -p 8080:80 nginx Unable to find im...

コンテナを作り直す

 とはいえ、上記の方法だと実はrunしたときと同じようにはなっていません。

 runのときのオプションでポートを指定した場合、そのコンテナを開始するとiptablesにもポートフォワード設定がなされ、停止するとiptablesの設定も一緒に消えてくれるようになっています。

 このあたりをオプションや設定ファイルの変更などで対応したかったのですが、どこにもみあたらなかったです…

 なので、コンテナの内容を引き継ぎながら作り直してしまうのがよいかもしれません。

 今度は通常のDockerを操作しているコンソールから、操作を行います。

コンテナイメージの作成

 対象のコンテナを停止してから、

のようにします。hogeはCONTAINER_IDまたはNAME、fugeはREPOSITORY、fugaがTAGになります。

これで

としてイメージを確認してみると、

というように作成されています。

イメージからコンテナを実行する

 これは普通に

で、起動した状況を確認すると、

となっています。

参考:

コメント

  1. […] iptablesで設定する。 Dockerコンテナのポートを後から解放する方法 の記事を見て、早速iptablesで設定をしてみる。 […]