使Docker容器拥有可被宿主机以外的机器直接访问的独立IP
我们常用的docker容器都是将ip端口映射到宿主机,通过宿主机IP进行访问。外部无法直接访问容器IP,下面简单介绍下怎么做到局域网内直接访问docker容器IP。
自动化脚本见 https://github.com/liwei128/my_pipework.git,一键运行,so easy
说明如下
一、准备工作
1.首先安装pipework
下载:gitHub地址 https://github.com/jpetazzo/pipework.git
文件上传用sftp方式连接,put进行上传
将pipework文件复制到/usr/bin/目录下,并设置为可执行脚本
cp pipework /usr/bin/
chmod +x /usr/bin/pipework
2.查询我们的网卡名、网卡ip、以及默认网关,后面需要用到
我的为ens33 172.16.3.217 172.163.3.1
二、开始设置IP
注意:此步骤可能会断开与宿主机的连接,因为网卡ens33的ip发生了变化,建议写成脚本文件.sh的形式执行
1. 删除ens33上面的ip地址
sudo ip addr del dev ens33 172.16.3.217/24
2. 新建网桥br0,并将ens33网卡桥接到br0
sudo ip link add link ens33 dev br0 type macvlan mode bridge
3.给网桥br0设置ip (为原ens33上的ip)
sudo ip addr add 172.16.3.217/24 dev br0
4.启用br0
sudo ip link set dev br0 up5.给br0设置默认网关(为上面查询到的默认网关),不然无法访问
sudo ip route add default via 172.16.3.1 dev br0
6.为docker容器指定IP地址
sudo pipework br0 cmv3-manager 172.16.3.251/[email protected]
sudo pipework br0 cmv3-mysql 172.16.3.253/[email protected]
说明:br0是第3步新建的网桥名,cmv3-manager和cmv3-mysql是docker容器名,@前面表示你要为该容器设置的IP地 址,@后面为网关地址
这样就将宿主机网卡以及docker容器接入了同一个网桥br0,实现局域网访问容器ip。效果如下
三、回滚方案
如果你需要还原成原有的IP配置,只需要这样:
sudo ip link delete br0
sudo service network restart
sudo systemctl restart docker
注意:此步骤可能会断开与宿主机的连接,因为网桥br0被删除了,建议写成脚本文件.sh的形式执行