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つずつ潰していきましょう!