Docker for Mac VPN 直通 Container IP 位址

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 位址。 落泪 /images/emoticon/emoticon02.gif

从 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

<<:  Flutter学习Day5 Widget StatelessWidget => StatefulWidget 实作

>>:  鼠年全马铁人挑战 WEEK 36:封包测试工具 - Charles (一)

【Day14】 Pytorch 转 Tensorflow

Part1 - Function 我们从几个常用的操作开始吧! 型态操作 # random np a...

[自然语言处理基础] 语法分析与资讯检索 (II)

前言 上一回我们将词性标签依序排列建构出片语组块( phrase chunk ),描绘出相应的分析树...

[DAY7]从0开始装k8s(2)-k0s

k0s k0s是Mirantis推出的轻量化Kubernetes发行版,Mirantis有一个k8s...

前人种树,後人乘凉之自动产生程序码片段 (下)

前一篇介绍了如何在PyCharm 中客制化建立自动产生程序码的方式及看到了实际执行的效果 但。。。 ...

Day17-Redux 篇-用 Redux Toolkit 实作范例

在第 15 天的文章中我们做了一个范例,现在我们要用 Redux Toolkit 去改写它。 第一步...