Docker: ホストOSーコンテナ間のポートフォワーディング

ホストLinux上でDockerコンテナを用いてWebサーバ等を提供する際、ホストLinux-Dockerコンテナ間でポートの紐付けが必要である。本記事は下記の3パターンのポートの紐付け方法を紹介する。尚、参考にした公式ガイドは記事末尾をご参照。

  1. docker run -pオプション
  2. docker run -Pオプション (DockerfileにEXPOSE指定)
  3. docker run –expose

docker run -pオプション

docker_run_port_forward
-pオプションで<ホストport>:<コンテナport>を紐付けることができる。

docker run -Pオプション (大文字)

docker_run_expose_port
予めDockerfileにEXPOSE文を用いてコンテナが開示するポートを指定してDockerイメージを構築後に、-P (大文字)オプションを使用すると、dockerエンジン側でコンテナ側のEXPOSE指定ポートにホスト側のポートをランダムに割り振り、紐付ける。
下記の例で使用している公式nginxのコンテナはDockerfile上でEXPOSE 80 443を指定している。
参考サイト) https://hub.docker.com/_/nginx/

因みにバインディングされているポートはdocker inspectコマンドの引数を活用することで確認可能。

ただ、このコマンド長すぎるので、オプション無しで出力→目視確認の方が現実的。

docker run –expose

上述ではDockerfile上でEXPOSEするポートをしていたが、docker run –exposeオプションでexposeするポートを指定する事も可能。ただ、このオプション使用シーンは余り思い浮かばないが。基本上記2パターンで十分な気もする。

コンテナを再起動した場合

尚、docker stop / docker start で一度runしたコンテナを再起動した場合、コンテナポートフォワーディング設定は自動的に引き継がれ、再設定される。その際、-Pオプションで指定されるホスト側のポートは再度ランダムで設定される。

参考サイト