Dockerでコンテナのポートにアクセスする方法についてまとめました.

特に,Windows, Mac 環境でDockerを利用する時は,boot2dockerを利用することになるので注意が必要です.

1. ポートバインディングの基本

基本的なポートへのアクセス方法はマニュアルにも記載があります.

expose (incoming-ports)

コンテナのポートをホスト(dockerを動かしている側)のポートに結びつける(バインド)ことでホストのポート越しにコンテナにアクセスできるようにします.

例) ホストのポート8888 をコンテナのポート80にバインドすると,ホストのポート8888にアクセスすることでコンテナの80へのアクセスができるようになります.

バインディングの方法

a. -pオプションの利用

docker run の実行時に-pオプションを利用します.

基本的には, -p [ホストのポート]:[コンテナのポート]という形で指定します.

例) コンテナの2375をホストの1000にバインディング

b. -Pオプションの利用(Pは大文字)

docker run の実行時に–exposeオプションで指定されたポート,もしくはDockerfileの中でEXPOSEにより指定されたポートへのアクセスを一括で可能にするオプションです.

個別のポート指定は不要ですが,ホスト側のポートはランダムで決定されます.

 

2.boot2dockerを利用する際の注意点

Linux上でdockerを利用している場合,1. で実施した方法にてポートバインディングを済ませれば,そのポートにアクセスできます.

例えば,コンテナのhttpの80をホストの1000にバインドした場合,http://localhost:1000へブラウザでアクセスすることができます.

しかし,boot2dockerを利用している場合は以下の手順でアクセスする必要があります.

(1) boot2dockerのVMのIPを確認

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になります.

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *