本地开发会用docker部署诸如rocketmq的中间件,但是有一个问题,rocketmq-broker注册到namesrv上的ip是docker-ip,mac本地是不能直接访问的,需要打通docker和mac本地的网络,本文即解决此问题。
之前使用过另外一种方式,但是太麻烦,我现在不用了:
docker-1:本地开发打通宿主机与docker服务网络
https://mp.weixin.qq.com/s/-Qkt5SeDYgYhDNqbQaUWYg
使用docker-connector(vpn概念),官方地址:
https://github.com/wenjunxiao/mac-docker-connector
mac端通过brew安装docker-connector
brew install wenjunxiao/brew/docker-connector
安装完成,按照提示通过命令添加路由,以下命令把所有bridge的网络都添加到路由中
docker network ls --filter driver=bridge --format "{{.ID}}" | xargs docker network inspect --format "route {{range .IPAM.Config}}{{.Subnet}}{{end}}" >> /usr/local/etc/docker-connector.conf
也可以手动修改/usr/local/etc/docker-connector.conf文件中的路由,格式是
route 172.100.0.0/16
Mac端和Docker端都默认使用了192.168.251.1/24的子网。如果Mac端已经被占用了,可在配置文件docker-connector.conf中新增addr xxx.xxx.xxx.1/24的地址(默认注释掉了):
/usr/local/etc/docker-connector.conf中去掉注释:
如果Docker端冲突了,需要修改启动容器的命令追加mac-receiver -addr xxx.xxx.xxx.1/24来指定地址.
路由的子网决定了你能访问那些容器,配置完成,直接启动服务(需要sudo)
sudo brew services start docker-connector
Install docker front of mac-docker-connector:
docker pull wenjunxiao/mac-docker-connector
如果执行失败,先docker login登陆hub.docker再执行。
docker端运行wenjunxiao/mac-docker-connector,需要使用host网络,并且允许`NET_ADMIN':
docker run -it -d --restart always --net host --cap-add NET_ADMIN --name connector wenjunxiao/mac-docker-connector
至此,宿主机与docker网络打通。