基于CentOs7使docker容器通过桥接模式被外部访问

docker 桥接模式

基础工具安装

brxrl

yum install bridge-utils

该命令相关用法可以参考 http://ipcmen.com/brctl

pipework

  • 从github上下载
cd /opt/
git clone https://github.com/jpetazzo/pipework.git
cp pipework/pipework /usr/bin/

创建网桥

  • 【步骤1,暂时不用执行】
    说明:有的设备需要执行该步骤才能被外网访问到,默认情况下无需加该步骤。
    该步骤的一个缺点是在启动容器时必须使用无网络模式(–net=none),否则会自动分配IP,该IP冲突后有可能导致宿主机断网而无法连接。(网络模式参见https://blog.youkuaiyun.com/iijik55/article/details/123871038)
#停止docker服务
systemctl stop docker;systemctl stop docker.socket;
#删除docker0网卡,此命令永久生效,重启不会恢复
ip link set dev docker0 down;(同ifdown docker0)
brctl delbr docker0;(删除docker0网卡)
#修改 /usr/lib/systemd/system/docker.service
在ExecStart字段后添加 -b bridge0 参数
#在执行完步骤2后,重新加载配置和启动服务
systemctl daemon-reload
systemctl restart docker
  • 步骤2:将下述命令制作成脚本执行,通过ifconfig命令可以查看网卡信息或者通过brctl show命令查看所有网桥
#添加网桥
brctl addbr bridge0;
#启动网桥
ip link set dev bridge0 up;(作用同ifup bridge0)
#删除已有网卡eth0的ip,此时ip被删掉会断网,所以需要把所有的命令放在一个脚本中执行
ip addr del 192.168.1.100 dev eth0 ; 
#分配ip和广播地址(使用刚才eth0删除的ip)
ip addr add $ip dev bridge0; 
#把eth0网卡接入到bridge0上,后续所有的请求都需要通过bridge0发给eth0
brctl addif bridge0 eth0; 
#给bridge0添加新的路由
ip route add default via 192.168.1.1 dev bridge0;

使用

  • 创建容器
    docker run -itd --name test ubuntu:16.04
  • 分配IP(ip/掩码@网关)
    pipework bridge0 test 192.168.1.100/24@192.168.1.1

注意

  • 上述配置重启后恢复
  • 有些设备使用上述方式无效,那么可以再次尝试,加上述“【步骤1】”内的步骤
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值