不必再與 Docker for Windows 搏鬥

雖然平時以 macOS 作為開發主力,偶爾還是會需要在 Parallel Desktop 使用 Windows,此時若要使用 Docker,雖然也能在 Parallel Destop 內跑 Docker for Windows,不過由於是 VM 中的 VM,Docker 並不穩定,比較建議的方式是 Windows 搭配 Docker for Mac 使用。

Version


macOS High Sierra 10.13.6
Docker for Mac 18.06.0-ce-mac70 (26399)
PostgreSQL 10.4
Parallel Desktop 13 Pro 13.3.2 (43368)
Windows 10 Pro 1803 17134.191
Rider 2018.1.3

Docker for Mac


1
$ docker-compose up -d

在 macOS 以 docker-compose 啟動 PostgreSQL container,且 port 為 1234

parallel000

由於將來 Parallel Desktop 內的 Windows 將連到 macOS 的 PostgreSQL container,目前已知其 port 為 1234 ,但 IP 是多少呢 ?

Parallel Desktop Network


parallel001

Parallel Desktop 預設的 network 是以 Shared Network 方式。

parallel002

什麼是 Shared Network 呢 ?

上圖中的 Mac 有 192.168.0.2010.211.55.10 兩個 IP

而 Windows 的 IP 則為 10.211.55.20

簡單的說相當於 Mac 有兩張網卡,一張網卡為 192.168.0.20,而另一張網卡為 10.211.55.10,而 Windows 的 10.211.55.20 與 Mac 的 10.211.55.10 為同一個網段,可彼此互通,然後再透過 192.168.0.20 這張網卡連上 internet。

parallel003

我們可發現 Parallel Desktop 自帶 DHCP,且 IP 從 10.211.55.1 開始到 10.211.55.254

parallel004

當 Parallel Desktop 啟動後,實際在 macOS 下 ifconfig 觀察,會發現多了 vinc0 這張網卡,其 IP 為 10.211.55.2

也就是說若要從 Parallel Desktop 的 Windows 連到 PostgreSQL container,IP 就是 10.211.55.2,port 為 1234

Windows


parallel005

  1. 在 Windows 內的 Rider 能夠以 10.211.55.2 : 1234 連到 Docker for Mac 的 PostgreSQL container

Conclusion

  • Parallel Desktop 都會穩定以 10.211.55.2 當成 macOS 的 IP,所以任何 Docker container 都可以跑在 macOS,然後 Windows 再以 10.211.55.2 連上即可,這樣就不需要執行 Docker for Windows 了

Reference


Parallels, Which networking mode (Bridged, Shared or Host-Only) should I use for the virtual machine?