Docker で Ruby on Rails のアプリケーションや nginx などのサーバーを起動しているとき、コンテナの作成時に適切にポートを割り当てていればホスト側からはブラウザで localhost:3000
などでアクセスができます。
しかし、スマートフォンの実機で確認したい、という場合、LAN 環境などで同一ネットワークに居たとしても
ホスト側の IP アドレス:3000
とアクセスしても表示されません。
どうやらホスト側の PC で自身の IP アドレスへのアクセスを Docker の IP アドレスに向ける必要があるようで、解決策を調べてみたところちょうどその方法を説明している Qiita のページがありました。
Docker Machineで構築した環境に実機端末でアクセスする
以下、Windows 環境での対応方法になります。
まず管理者権限でコマンドプロンプトを起動します。
次に ipconfig
コマンドで自身の IP アドレス(IPv4 アドレス)を確認します。Windows のネットワークのプロパティからも確認できます。
netsh
コマンドでポートフォワーディング設定を行います。
netsh interface portproxy add v4tov4 listenport=(ポート番号) listenaddress=(ホスト側の IP アドレス) connectport=(ポート番号) connectaddress=(Docker の IP アドレス)
Docker の IP アドレスは 192.168.99.100 だったり環境によって変わりますが、例えば rails を起動するときに
rails s -b 0.0.0.0
として起動した場合には netsh コマンドで設定する Docker の IP アドレスは 0.0.0.0 となります。
例えば私の環境では次のようになります。
netsh interface portproxy add v4tov4 listenport=3000-3010 listenaddress=192.168.10.6 connectport=3000-3010 connectaddress=0.0.0.0
ポート番号を 3000-3010 としたのは、rails 以外にも gulp-webserver などを利用することがあるので、ポート番号に幅を持たせています。
設定確認は netsh interface portproxy show v4tov4
、設定のリセットは netsh interface portproxy reset
です。
次にファイヤーウォールの設定をします。
Windows10 Pro で Windows Defender を使っている場合は
Windows Defender セキュリティセンター > ファイヤーウォールとネットワーク保護 > 詳細設定
でファイヤーウォールの設定ウィンドウが開きます。
そこで上記のページにもあるとおり、
受信規則の設定を右クリック
↓
新しい規則(N)規則の種類
ポートプロトコルおよびポート
TCP
特定のローカルポート 80操作
接続を許可する(A)プロファイル
プライベート
パブリック
とすれば設定完了です。ファイヤーウォールの設定名はあとから何の設定かわかるよう、わかりやすい名前にしておきましょう。
設定が正しくできていれば、スマートフォンなどから IP アドレス:ポート番号
でアクセスができるようになっているはずです。
0件のコメント