DockerでWebサービス等を開発する際、PC内のDockerコンテナへスマホからアクセスしたいことがあります。
ですが、そのままDockerのIPアドレスにアクセスしても繋がりません。スマホが繋がっているLANとDockerコンテナが動いているネットワークが別々だからです。
そこで、PC上でポートフォワード(ポート転送)をかけてネットワーク間の橋渡しをしてやれば、スマホからDockerコンテナにアクセスできるようになります。
Windowsでは、netshコマンドでポートフォワードを設定できます。
また、拙作のGUIツールも紹介したいと思います。
netshコマンド
これはWindows標準のコマンドのようですので、たぶんどのPCにもインストールされています。コマンドプロンプト等から使います。
転送設定の確認
> netsh interface portproxy show v4tov4
転送設定の追加(要管理者権限)
> netsh interface portproxy add v4tov4 listenport={fromPort} listenaddr={fromAddr} connectport={toPort} connectaddr={toAddr}
転送設定の削除(要管理者権限)
> netsh interface portproxy delete v4tov4 listenport={port} listenaddr={addr}
設定の追加・削除には管理者権限が必要ですので、コマンドプロンプトを管理者権限で起動しておくのを忘れないようにしましょう。
また、デフォルトの状態では、パケットフィルタでポートが閉じていますので、ポートを開放する必要があります。(順番はどっちが先でも大丈夫です)
参考:Windows10 - ファイアウォール - 特定のポート番号の通信を許可
portproxyというGUIツール
ですがこのnetshコマンド、パラメータは多いしサブコマンドも長くて覚えにくいです。
コマンドプロンプトを管理者権限で起動しておくのも忘れがちです。
さらに、netshコマンドを打つ前にPCのIPアドレスを調べておく必要もあり、手順が長い。
ポート転送を設定するためのツールとしては、正直使いにくいと思います。
それで、netshのGUIラッパーを作りました。
portproxy
- 必要なときに管理者権限を要求します。あらかじめ管理者権限で起動しておく必要はありません
- IPアドレスを入力する際にPCのアドレスを候補として表示します。あらかじめ調べておく必要はありません
Electron性なので少し重いです。
netshコマンドを使う場合と同様、パケットフィルタのポートを開放しておく必要があります。
まとめ
コンテナ内に作ったサービスをスマホで確認したいシーンは多くあると思います。
アクセス方法は、整理してみれば難しいことはありませんし、GUIツールも出来て気軽に試せるようにもなりました。
どんどん使っていってはいかがでしょうか。