質問: ### 前提・実現したいこと Windowsで作成したコンテナに外部(別PCのブラウザなど)からアクセスしたいです。 現在WindowsとMacを利用して開発を行っています。 WindowsもMacも同じように実行してコンテナを作成しているのですが、 Macは外部からもアクセスできるが、Windowsではアクセスできない状態になってしまっています。 スクリプトや環境などコンテナの中はどちらも同じ状態になるようにコンテナを作成しています。 ### 発生している問題 Docker Kitematic で確認すると Macで作成したコンテナのPortsには DOCKER PORT -> 80 MAC IP:PORT -> localhost:ポート Windowsで作成したコンテナのPortsには DOCKER PORT -> 80 MAC IP:PORT -> 192.168.99.100:ポート となっています。 cmdに「ipconfig」を入力し、192.168.99.100を確認すると 「VirtualBox Host-Only Network」とありました。 この部分の違いが問題となって接続できていないと考えていますが 解決方法がわかりません。 何をすればWindowsで作成したコンテナにも外部からアクセスできるようになるか教えてください。
回答: sshのポートフォワーディングを使用してネットワーク上にポートを公開することができます。 * 動作確認等のために一時的に他からアクセスできるようにする程度を想定。 * Docker Toolboxを利用している想定。 Docker Quickstart Terminalで以下のコマンドを実行します。 ``` # パスワードは tcuser (デフォルト設定) $ ssh -fNCL 0.0.0.0:80:localhost:ポート docker@192.168.99.100 ``` * `-f` : SSHをバックグラウンドで実行する * `-N` : SSHトンネリングのみに使用する(ターミナルとして使用しないということか?よくわからんです) * `-C` : データを圧縮して送る * `-L` : Windows上のソケット `0.0.0.0:80` へのパケットを、dockerホストのソケット `localhost:ポート` に転送 **【参考】** * Docker 1.8.1 - Installing on Windows 7 - Qiita * SSHのポートフォワーディングでMySQLに接続する方法 | 株式会社田村倉庫 **【おまけ】** SSHポートフォワーディングについて図にしてみました。 * 基本はローカルからリモートへのSSH接続 `ssh docker@192.168.99.100` * SSH接続経路を利用してローカルポートへの接続をリモート側ネットワークのポートに転送する * ローカル側は接続元のソケット(IPアドレス:ポート)を指定し、リモート側は接続先からアクセスできるIPアドレスとポートを指定する * リモート側を「localhost:ポート」としたが、「コンテナIP:80」でも通信可能 「localhost:ポート」(Windows⇒SSHサーバ⇒localhost⇒dockerポートフォワード⇒コンテナ) 「コンテナIP:80」(Windows⇒SSHサーバ⇒コンテナ) !SSHポート転送