这里介绍Mac环境下,通过docker-connector方式将宿主机网络与Docker桥接网络的连通。实现宿主机本地可以通过容器IP访问Docker容器
楔子
一方面,在Mac、Windows中,宿主机无法通过容器IP访问Docker容器;另一方面,容器通过 —net=host 选项使用host网络模式也仅在Linux系统上有效。在桥接网络下,宿主机与容器的网络通信是借助端口转发完成的。而在本地Web服务访问容器集群时,则需要使用容器IP访问。进而会导致本地Web服务无法访问容器。故这里介绍通过docker-connector的方式,将本地宿主机网络与Docker桥接网络的连通。实现宿主机本地可以通过容器IP访问Docker容器
安装
宿主机
docker-connector对Mac、Windows两种宿主机环境都提供了支持,这里介绍下在如何在Mac宿主机环境中安装docker-connector服务
1 | # 通过brew安装docker-connector |
启动docker-connector服务,并将其设置为开启自启。当我们将该服务设置为开机自启后,其会生成一个相应的plist文件
1 | # 将指定服务设置为开机自启,并运行该服务 |
brew services的相关命令如下所示。需要注意:本文中所有关于brew services的命令执行都需要添加sudo
1 | # 查看当前用户的所有服务 |
Docker
在Docker中创建desktop-docker-connector容器。该容器不仅需使用host网络模式,同时需通过 —cap-add NET_ADMIN 选项为该容器添加管理网络的权限
1 | # 拉取镜像 |
配置
确定服务所使用的配置文件
通过刚刚执行sudo brew services list命令,我们知道该服务对应的plist文件。查看该plist文件后,不难看出该服务的日志文件的位置
此时通过重启服务,我们即可通过日志文件来确定服务所读取的配置文件位置
事实上,我们也可以直接通过plist文件确定配置文件位置。如下所示,这里使用相对路径指示配置文件的位置
现在,确定该配置文件是否存在。如若不存在,创建该配置文件即可
添加对容器桥接网络的路由
现在,我们只需添加对容器所在桥接网络的路由即可。这里我们有一个基于Docker的3主3从的Redis集群。首先,确定桥接网络的子网信息,利用下述命令可以看出该redis集群的桥接网络的子网为 120.120.120.0/24
1 | # 查看Docker的桥接网络 |
然后,在docker-connector服务的配置文件添加对该网络的路由,写法如下所示。最后,利用sudo brew services restart命令重启该服务即可,现在我们就可以在宿主机中使用容器IP、容器端口来访问该容器了,而无需借助端口转发进行通信
1 | # 添加对 120.120.120.0/24 网络的路由 |
验证网络连通性
现在我们选择redis-cluster-3m3s_redis_cluster_3m3s_net桥接网络中的一个容器节点——node 1。尝试在宿主机中通过容器IP、容器端口进行访问
1 | # 查看node-1容器的容器IP |
效果如下所示,访问成功