VirtulaBox の VM からローカルへのポートフォワーディング
Linux 以外の OS 上で Docker を利用する場合、 VirtualBox などで Linux のホスト VM を立てる必要があります。このとき、ホスト VM からローカルへポートフォワーディングしたいと思うときがあります。これをおこなうには、 VirtualBox の CLI である VBoxManage
の controlvm
コマンドを使います。
1 | VBoxManage controlvm <VM_NAME> natpf<1-N> "<RULE_NAME>,tcp,<LOCAL_IP>,<LOCAL_PORT>,<VM_IP>,<VM_PORT> |
<LOCAL_*>
はローカルマシンのものを、 <VM_*>
はホスト VM のものを表します。<RULE_NAME>
はルール名で、わかりやすいように名付けるとよいです。 また <VM_IP>
は省略可能です。
では実際に試してみましょう。たとえば、 PostgreSQL の Docker コンテナのポート 5432 をローカルの 5432 にポートフォワーディングしたい場合を考えます。以下のように、コンテナからホスト VM へはあらかじめポートフォワーディングされているものとします。
1 | $ docker run -e POSTGRES_PASSWORD=password -d -p 5432:5432 postgres |
このとき、ホスト VM 名が dev
であるとすると、ホスト VM の 5432 から ローカルの 5432 にポートフォワーディングするには、以下のコマンドを実行します。
1 | $ VBoxManage controlvm dev natpf1 "psql_pf,tcp,127.0.0.1,5432,,5432" |
では確かめてみましょう (OS X の場合)。
1 | $ lsof -P -i -n | grep ':5432 ' |
きちんと 5432 番で listen していますね。