「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>Docker for Windows]]

* 目次 [#be3be525]
#contents

*概要 [#v3dd7ac4]
ネットワーク設定が解らなかったので。

*詳細 [#ud9c13f3]

**構成 [#h974e5f6]
[[Windowsホスト>#p90046db]]と[[各コンテナ>#sa5b774b]]の間には、~
[[DockerNAT>#ke9976b4]] > [[MobyLinuxVM>#k5671d33]]がある。

***Windowsホスト [#p90046db]
-Windows上のDockerクライアントから~
[[MobyLinuxVM>#k5671d33]]へリモート接続(名前付きパイプを介して)している。

-[[DockerNAT>#ke9976b4]]はデフォルトで、10.0.75.1/24をWindowsホストに割り当てる。

***DockerNAT [#ke9976b4]
-[[Windowsホスト>#p90046db]]と[[MobyLinuxVM>#k5671d33]]は、DockerNAT経由で繋がっている。
-Docker Desktop 2.2.0で、[[DockerNATが廃止>#o0ae51ae]]されたとのこと。

***MobyLinuxVM [#k5671d33]
-[[Hyper-V]]の仮想マシン

-LinuxのネイティブなDockerホスト環境とDockerデーモン

-[[DockerNAT>#ke9976b4]]はデフォルトで、10.0.75.2/24をMobyLinuxVMに割り当てる。

***Docker0 [#i216286e]
[[MobyLinuxVM>#k5671d33]]と[[各コンテナ>#sa5b774b]]は、~
既定値では、Docker0というネットワークで繋がっている。

***各コンテナ [#sa5b774b]
[[MobyLinuxVM>#k5671d33]]上のDockerデーモンは、~
172.17.0.0/16の範囲でIPアドレスをコンテナに割り当てる。

**接続例 [#ff4a32e5]

***[[Windowsホスト>#p90046db]] → [[各コンテナ>#sa5b774b]] [#b2a8541d]
-「localhost:ポート番号」で接続可能。

-ポート番号は、[[docker-compose.yml>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%82%BA]]ファイルの~
portsセクションに「ホスト・ポート:コンテナ・ポート」の書式で指定する。

***[[各コンテナ>#sa5b774b]] → [[Windowsホスト>#p90046db]]のローカルサービス [#ifc44a12]
[[各コンテナ>#sa5b774b]]から、10.0.75.1で、[[Windowsホスト>#p90046db]]のローカルサービスにブリッジ可能。

***Windowsホストの外部IP → [[Windowsホスト>#p90046db]] → [[各コンテナ>#sa5b774b]] [#j26b2937]
[[Windowsホスト>#p90046db]]のIPアドレスで[[各コンテナ>#sa5b774b]]にアクセスする。

-Windows ファイアウォールの受信規則で、ポートを開放し、

-Docker Desktop 2.1.0.5 以前

--以下のルーティング設定を行い、~
[[Windowsホスト>#p90046db]]のIPアドレスを10.0.75.1にマップする。
 >ipconfig
   IPv4 アドレス . . . . . . . . . . . .: yyy.yyy.yyy.yyy
   サブネット マスク . . . . . . . . . .: xxx.xxx.xxx.xxx
 ...
 
 >route -p add 10.0.75.1 mask xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy
 OK!
 
 >route print
 ...

--ルーティング設定を削除する場合は以下。 
 >route delete 10.0.75.1 mask xxx.xxx.xxx.xxx
 OK!

-Docker Desktop 2.2.0 以降~
既定で、[[Windowsホスト>#p90046db]]の外部IPで接続できる模様。

***[[各コンテナ>#sa5b774b]] → [[Windowsホスト>#p90046db]]の外部IP → [[各コンテナ>#sa5b774b]] [#j2618e83]

-10.0.75.1で[[各コンテナ>#sa5b774b]] → [[各コンテナ>#sa5b774b]]にブリッジ不可能。

-[[Windowsホストの外部IP → Windowsホスト → 各コンテナ>#j26b2937]]を構成し外部IPでブリッジ可能。~
(コンテナA → Windowsホスト → Windowsホストの外部IP → Windowsホスト → コンテナB)

***[[Windowsホスト>#p90046db]] → [[MobyLinuxVM>#k5671d33]]のIP → コンテナ [#fc8652aa]
[[Windowsホスト>#p90046db]]から、[[MobyLinuxVM>#k5671d33]]のIPアドレスでアクセスする。

-以下のルーティング設定を行い、~
[[MobyLinuxVM>#k5671d33]]のIPアドレスを172.17.0.0にマップする。
 $ route add 172.17.0.0 MASK 255.255.0.0 10.0.75.2

-ルーティング設定を削除する場合は以下。 
 $ route del 172.17.0.0

**DockerNAT廃止 [#o0ae51ae]
-DockerNAT廃止に伴い、10.0.75.1が、不要になる(と言うか使えなくなる)らしい。

--Missing DockerNAT after upgrading to Docker Desktop~
2.2.0 on Windows · Issue #5538 · docker/for-win~
https://github.com/docker/for-win/issues/5538

-調べてみたトコロ、[[Windowsホスト>#p90046db]]の外部IPを使用すれば接続できる模様。
--ただし、異なるPCにデプロイした場合や、DHCPでIPが可変の場合は問題となる。
--このため、host.docker.internalと言うDNS名や、hostsファイルで解決することもできる模様。
--「host.docker.internal」は、[[コチラ>IIS Express#s7564fb6]]の様に名前解決される。

-参考
--Qiita
---Dockerのコンテナの中からホストOS上のプロセスと通信する方法~
https://qiita.com/ijufumi/items/badde64d530e6bade382
---Dockerコンテナ内からホストへ`localhost` でアクセスしてみる~
https://qiita.com/kai_kou/items/5182965ea75c85cf1e3f

*参考 [#f34f0449]
-Azure + Docker Compose + Hyper-Vで開発環境 - Azure登録 ~ Webサーバー立ち上げ~
| Web技術Tips | ホームページ制作のDOE【横浜】 ~手を抜かず最大のパフォーマンス~~
https://www.doe.co.jp/hp-tips/server/azure-docker-hyper-v01/

-Dockerコンテナに外部からアクセスする方法 – ムッシューのIT備忘録~
https://mussyu1204.myhome.cx/wordpress/it/?p=115

-Docker for Windowsでsambaを使う - Qiita~
https://qiita.com/KNaito/items/0d67fc2293e15c3960fc

-図解で理解できる(はず)Microsoftの仮想化技術~
――Windows上で稼働するLinux、動かしているのはどのテクノロジー?(その2)~
(2/2):その知識、ホントに正しい? Windowsにまつわる都市伝説(95) - @IT~
https://www.atmarkit.co.jp/ait/articles/1710/24/news010_2.html

-Windows コンテナーネットワーク | Microsoft Docs~
https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/container-networking/architecture

**[[開発基盤部会 Wiki>https://dotnetdevelopmentinfrastructure.osscons.jp/]] [#wfbe74db]
***[[Dockerのネットワーク設定>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A]] [#e81ba50e]

----
Tags: [[:Windows]], [[:Hyper-V]], [[:仮想化]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS