1. トップ
  2. 新着ニュース
  3. IT
  4. パソコン

Windows Subsystem for Linuxガイド 第38回 WSL2でDockerを使う その4「ネットワーク接続Dockerエンジン編」

マイナビニュース / 2024年7月2日 13時42分

NATモードでは、DockerエンジンのコンテナをLAN側からアクセスすることができない。これは、WSLディストリビューション上のプロセスでも同じである。Dockerデスクトップの場合、Win32側に、LAN側からのネットワークアクセスを受け付け、コンテナ側にルーティングする機能があり、何もしなくてもLAN側からのアクセスが可能になる。この機能と、WSLの標準状態やDockerエンジンの場合を混同しないように注意されたい。

Win32側でPortProxyを設定することで、NATモードでも、LAN側からWSL側へのネットワーク接続が可能になる。ただし、設定は、再起動ごとに行う必要があり、スクリプトを作成し、システムの起動時に実行させるなど、結構面倒な作業が必要になる。このため、LAN側からDockerエンジンのコンテナへのアクセスを行わせたい場合には、Mirroredモードの利用をお勧めする。

PortProxyに関しては、Microsoftのドキュメント「WSL を使用したネットワーク アプリケーションへのアクセス」を参照されたい。
Mirroredモードの場合

Mirroredモードの場合のWin32、WSL、LAN側からアクセスをまとめたのが表03である。

WSLがMirroredネットワークの場合、WSLは、ホスト側Win32と同じIPアドレスを使う。しかし、このとき、WSLでのコンテナの待ち受けがワイルドカード(0.0.0.0。ホスト上のすべてのネットワーク・インターフェースを表す)だと、パケットがコンテナへ転送されない。

この問題を解決するには、コンテナの起動オプションに「--net=host」を追加し、ホストネットワーク(host)で動作させる。これにより、Win32側からLocalhost/127.0.0.1や、Win32側ホストアドレスでのアクセスが可能になる。

Dockerエンジンでは、標準設定でIPv6に対応していないため、Mirroredネットワークにしただけでは、コンテナにIPv6ではアクセスできない。DockerエンジンでのIPv6利用(デュアルスタック)の設定に関しては、本稿の範囲を超えるため、Dockerのドキュメントなどを参照してほしい。

WSLのMirroredモードの特徴として、LAN側からWSL上のサービスへのアクセスが可能になる。これは、Dockerコンテナでも有効。また、このとき、コンテナのネットワークは、bridgeでもhostでも同じである。このため、Dockerエンジンの場合、コンテナを常にホストネットワーク(host)で動作させることができる。利用方法によってコンテナ起動オプションを使い分けるよりも、Mirroredモードでは、常にホストネットワーク(host)を使うとする方が覚えやすい。

ネットワークモードをMirroredにすると、.wslconfigのlocalhostForwarding設定が無効になる。WSLの起動時にメッセージが表示されるが、そのままにしておいても問題はない。

Dockerエンジンの場合にLAN側を含めて、サービスを行わせるには、Mirroredモードを利用する方がよさそうだ。なお、Win32側、WSL側からだけアクセスできればよい、というのであれば、NATモードのままでもよい。

> Windows Subsystem for Linuxガイド 連載バックナンバー
https://news.mynavi.jp/tag/winsubsystem/
(塩田紳二)



この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください