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 アドレス:ポート番号 でアクセスができるようになっているはずです。

カテゴリー: Docker

0件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください