Docker Desktop for Mac 缺少 Linux 版本的 docker0 bridge 介面,因而 MAC Host 本身無法與 Container IP 直接溝通。 https://docs.docker.com/docker-for-mac/networking/ (docker官網)
Docker desktop community : 2.4.0.0 ( 48506)
Engine : 19.03.13 , Composse : 1.27.4 , Kubernetes : 1.18.8
搜尋看到了 Yowko’s Notes [ 從 mac 使用 Container Ip 直連 ] 的文章,趁假日空閒時間就來實作試試。
依照文章步驟,在 啟用 Docker for Mac 的 Kubernetes 功能設定..就卡關。等待許久的時間,Google 發現有不少 Kubernetes always stuck at 'Starting' 的問題,試過「Reset Kubernetes cluster」似乎無效,最後只好出大招──將 Docker( Reset to factory defaults )回復原設定值,Kubernetes 也因此啟用成功了。
註: 首次啟用或許太過心急,Kubernetes 下載安裝需要時間。選擇了回復原設定值,也一併將之前的 Docker Image 都清空。
接下來brew install Helm (安裝的版本為 V3.3.4),依照步驟 8 執行指令,出現 --generate-name 錯誤訊息
helm install docker-for-mac-openvpn-0.1.0.tgz -n docker-for-mac-openvpn
應該是新的版本已經不需要 -n 參數,所以將指令進行修改後可以執行,不過卻沒有產生 docker-for-mac.ovpn 檔案。 docker ps -a , Container 似乎在不斷重複的執行、停止。 眼看無法繼續接下來其他步驟,只好放棄。
helm install docker-for-mac-openvpn docker-for-mac-openvpn-0.1.0.tgz
工程師的使命,不死心的換參考 Yowko’s Notes 下列連結 [ Docker for Mac 容器网络的直连方法 ] , 先用 Kubernetes 運行的方式安裝,結果同樣失敗,沒有產生 docker-for-mac.ovpn。
換用 Docker Compose 方式 , 順利的產生 docker-for-mac.ovpn ,編輯檔案的末尾新增 Docker for MAC Container IP 網段 ( 172.17.0.0/16 )
route 172.17.0.0 255.255.0.0
然後將 docker-for-mac.ovpn 檔案 拖拉到 MacOS OpenVPN 客戶端程式 Tunnelblick , 選擇[ 連接 docker-for-mac ] , 結果是無法建立 Openvpn 連線。
Docker 功力不夠,無法對 docker-compose.yml 進行修改,只好繼續 Google。 台部落 - [ 完美解決 MacOS 下不能 ping Docker 容器的問題 | MacOS 使用 ssh 鏈接容器 ],採用 docker-compose 方式,指令跟步驟有些不一樣, 所以又再一次的實作看看。
1。 下載 Github 程式 https://github.com/wojas/docker-mac-network
2。 修改 helpers 目錄下的 run.sh . 與文章內容相同 route 172.17.0.0 255.255.0.0
3。 執行 docker-compose up ( 沒有 -d Detached mode:, 會顯示程式執行的狀況)
執行的狀況在 config 目錄底下一直有 .bak 檔產生,畫面也一直出現 The file '/etc/openvpn/vars' was not found. 的錯誤訊息,同樣等了一段時間,終究還是沒有 docker-for-mac.ovpn 檔案產生。
[ 容器网络的直连方法 ] docker-compose.yml 可以正常產生檔案,所以聯想到比對一下兩個 Github Project docker-compose.yml程式的差異. 將 image: kylemanna/openvpn 加上 2.4 , volumes 也稍微修改一下後。 執行 docker-compose up , 出現「 Initialization Sequence Completed 」就順利產生 docker-for-mac.ovpn 檔案。
docker-mac-network-master ─ docker-compose.yml 檔案修改
修改後 : 修改前 :
openvpn: openvpn:
image: kylemanna/openvpn:2.4 image: kylemanna/openvpn:
volumes: volumes:
- .:/data - .:/local
- .:/local - ./config:/etc/openvpn
- ./local/config:/etc/openvpn network_mode: host
network_mode: host
台部落的文章,對於編輯 docker-for-mac.ovpn 有提到一坑,「需要加一個 comp-lzo yes 屬性」(註:route ip 網段已經自動加入),加上後,再次拖拉到 OpenVPN 的客户端 Tunnelblick 。
感動~~ OpenVPN 連線成功。但是 .... MAC host 還是同樣 Ping 不到 Container IP 位址。 落淚 ![]()
從 Container 顯示的訊息中,有一行警告。 將 comp-lzo yes 屬性 刪除,再重新匯入 Tunnelblick。
終於~~ 完成 Docker for MAC 直通容器網路 的設定.
WARNING: 'comp-lzo' is present in remote config but missing in local config,
Container 容器名稱:
停止 :
docker stop docker-mac-network-master_proxy_1
docker stop docker-mac-network-master_openvpn_1