Docker Toolbox上のコンテナに別PCからアクセスするためのポートフォワード設定

Docker Toolbox上のコンテナに別ホストからアクセスしたい

Windows Server 2012 r2上で動いているDocker Toolboxに別のPCからアクセスするのに苦労したので、行った設定を記しておきます。

別PCからアクセスするためには大きく分けて3つの設定が必要になります。

  • VirtualBox上のVMからコンテナへ転送
  • Windows Serverにアクセスされた通信をVirtualBox上のVMへ転送
  • 外部からWindowsServer内へのアクセス

VirtualBox上のVMからコンテナへ転送

Docker Containerを起動するときにポートフォワーディングの設定を行います。

ここでは例としてGitLabのコンテナの起動コマンドを取り上げます。

sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 8929:80 --publish 2289:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

引用:Expose GitLab on different ports

10080で公開したいので、–publish 8929:80の部分を–publish 10080:80に変更します。

こうすることで、docker-machineのip:10080にアクセスしたときにGitLabのdockerコンテナの80ポートにポートフォワーディングされるようになります。

-p で指定もできます。

$ docker run --name some-nginx -d -p 10080:80 nginx

Windows Serverにアクセスされた通信をVirtualBox上のVMへ転送

Windows Serverに特定のポートでアクセスされたときにVirtualBoxに通信を転送するように設定します。

VMを起動している場合は停止させましょう。

VirtualBox上で転送を行いたいVMを右クリックして、設定を押下します。

ネットワークを選択し、割り当て[NAT]を選択していることを確認し、下の方のポートフォワーディングを押下します。

右にある緑の+を押下し追加していきます。

例)Windows Serverへの10080ポートへのアクセスをVM上に10080で転送したい場合

  • 設定項目
    • 名前:(任意):Gitlab
    • プロトコル:TCP
    • ホストIP:(全通):0.0.0.0
    • ホストポート:10080
    • ゲストIP:(空):
    • ゲストポート:10080

以上を入力してOKで設定を完了してください。

この段階でWindows Serverでlocalhost:10080を叩くだけでVM上のDocker ContainerであるGitlabにアクセスできるようになりました。つまり、Windows Serverに10080ポートでアクセスしたときにVMにアクセスを転送していることが確認できます。

外部からWindows Server内へのアクセス

Windows Serverがあるネットワーク上の別のPCからWindows Server内にアクセスできるようにする必要があります。

通信で使いたいポートを指定して開放します。

例えば、xxx.xxx.xxx.xxx:10080でアクセスしたかったので、受信の10080のTCPポートを開放します。

さいごに

最後に設定が必要な場所をおさらいしておきましょう。

要点まとめ

VirtualBox上のVMからコンテナへ転送
Windows Serverにアクセスされた通信をVirtualBox上のVMへ転送
外部からWindowsServer内へのアクセス

3点のポイントがあることを意識して、つながらない場合1箇所ずつ確認して問題を1つずつ潰していきましょう!