docker-1:本地开发打通宿主机与docker服务网络

2022-04-28 16:03:16 浏览数 (1)

目录

(1).需求

(2).打通宿主机与docker服务网络

1.mac不支持docker0与windows解决方式

2.mac解决方式

3.注意事项

4.验证

(1).需求

笔者经常在本地mac本上研究一些东西,需要一个本地的开发环境,使用docker来管理环境是一个性价比非常高的做法。

笔者的痛点在于,在写java开发框架时saf时(https://github.com/saf-group

)要进行调试,需要apollo,zookeeper等各种基础设施,这些虽然都在远端的个人买的云ecs上的K8S,但是网络是不通的,每次只能code提交到github,然后在ecs上部署到k8s后调试,还没有办法debug,代价巨大。

(2).打通宿主机与docker服务网络

1.mac不支持docker0与windows解决方式

mac有一个问题,docker服务的网段和宿主机是不同的,两者通信会出现问题,而mac上更麻烦的一点是不支持docker0,没有办法这样修改后重启docker生效:

/etc/docker/daemon.json

代码语言:javascript复制
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] ,
"bip":"192.168.0.1/16"
}

上述方法在windows上可以解决。

2.mac解决方式

使用openvpn方式,github上有一个docker-mac-network工程,可以生成打通网络的vpn文件。

Step1.

安装这个客户端vpn的客户端:tunnelblick。

Step2.

git clone https://github.com/wojas/docker-mac-network.git

Step3.

修改文件里的ip和子网掩码,改为你容器的

vim helpers/run.sh

代码语言:javascript复制
#!/bin/sh

dest=${dest:-docker.ovpn}
 
if [ ! -f "/local/$dest" ]; then
    echo "*** REGENERATING ALL CONFIGS ***"
    set -ex
    #rm -rf /etc/openvpn/*
    ovpn_genconfig -u tcp://localhost
    sed -i 's|^push|#push|' /etc/openvpn/openvpn.conf
    echo localhost | ovpn_initpki nopass
    easyrsa build-client-full host nopass
    ovpn_getclient host | sed '
        s|localhost 1194|localhost 13194|;
        s|redirect-gateway.*|route 172.19.0.0 255.255.0.0|;
    ' > "/local/$dest"
fi
 
# Workaround for https://github.com/wojas/docker-mac-network/issues/6
/sbin/iptables -I FORWARD 1 -i tun  -j ACCEPT
 
exec ovpn_run

上述代码中,172.19.0.0是我的docker服务的IP段,255.255.0.0是我docker服务的子网掩码。都可以到容器中用ifconfig查看。

使用如下命令可以进入docker容器:

docker exec -it apollo-quick-start /bin/bash

Step4.

在刚刚克隆下的目录中执行 ,注意因为是后台执行所以你要等看到当前目录生成docker-for-mac.ovpn这个文件为止

docker-compose up -d

要加-d参数,这样保证后台运行,不会退出。

在docker-for-mac.ovpn文件中添加一行

comp-lzo yes

作用是:在vpn连接中启用压缩功能,如果使用这个功能,那么客户端配置文件中也要使用该指令。

Step5.

双击docker-for-mac.ovpn这个文件,然后跟着tunnelblick提示一直点就行了。

最后连接VPN,完成打通。

3.注意事项

如果要重新生成vpn文件,需要删除docker-for-mac/conifg目录下的文件,同时删除如下相关容器:

代码语言:javascript复制
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS                        PORTS                                                  NAMES
3f3ca264c533        kylemanna/openvpn              "/local/helpers/run.…"   10 hours ago        Exited (0) 37 minutes ago                                                            docker-mac-network_openvpn_1
03f57102a268        docker-mac-network_proxy       "socat TCP-LISTEN:13…"   10 hours ago        Exited (143) 37 minutes ago                                                          docker-mac-network_proxy_1

否则,再次执行docker-compose up -d可能会失败。

4.验证

ping验证

172.19.0.3是docker中apollo配置中心的ip

代码语言:javascript复制
ping 172.19.0.3
PING 172.19.0.3 (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: icmp_seq=0 ttl=63 time=0.892 ms
64 bytes from 172.19.0.3: icmp_seq=1 ttl=63 time=1.826 ms

(3).相关文章

kubernetes-1:使用kubeadm搭建K8S单master节点集群

0 人点赞