Dockerでコンテナのポートにアクセスする方法についてまとめました.
特に,Windows, Mac 環境でDockerを利用する時は,boot2dockerを利用することになるので注意が必要です.
1. ポートバインディングの基本
基本的なポートへのアクセス方法はマニュアルにも記載があります.
コンテナのポートをホスト(dockerを動かしている側)のポートに結びつける(バインド)ことでホストのポート越しにコンテナにアクセスできるようにします.
例) ホストのポート8888 をコンテナのポート80にバインドすると,ホストのポート8888にアクセスすることでコンテナの80へのアクセスができるようになります.
バインディングの方法
a. -pオプションの利用
docker run の実行時に-pオプションを利用します.
基本的には, -p [ホストのポート]:[コンテナのポート]という形で指定します.
例) コンテナの2375をホストの1000にバインディング
1 |
docker run -it --privileged --name some-docker -p 1000:2375 -d docker:dind |
b. -Pオプションの利用(Pは大文字)
docker run の実行時に–exposeオプションで指定されたポート,もしくはDockerfileの中でEXPOSEにより指定されたポートへのアクセスを一括で可能にするオプションです.
個別のポート指定は不要ですが,ホスト側のポートはランダムで決定されます.
2.boot2dockerを利用する際の注意点
Linux上でdockerを利用している場合,1. で実施した方法にてポートバインディングを済ませれば,そのポートにアクセスできます.
例えば,コンテナのhttpの80をホストの1000にバインドした場合,http://localhost:1000へブラウザでアクセスすることができます.
しかし,boot2dockerを利用している場合は以下の手順でアクセスする必要があります.
(1) boot2dockerのVMのIPを確認
1 2 |
$ boot2docker ip The VM's Host only interface IP address is: 192.168.59.103 |
Macの場合ですと,Terminal上からboot2docker ipコマンドを実行し,IPアドレスを確認します.
(2) 確認したIPアドレスへアクセス
うえで上げた例ですと,http://192.168.59.103:1000にアクセスすることでコンテナにアクセスできます.
説明
boot2dockerはvirtualboxを利用して仮想化サーバ上でLinuxを動かし,その上でDockerを動かしています.
dockerコマンドを実行する際には,仮想化サーバ上のDockerにアクセスしにいきます.
各コンテナも実際は仮想化サーバ上で実行されているため,ポートバインディングされるのはホストのIP(localhost, 127.0.0.1)ではなく,仮想化サーバのIPになります.