前言
群晖Docker默认网络模式是bridge和host,无论哪一种,都可能会出现端口冲突无法使用的问题,比如群晖已经占用了888端口,那么容器就没办法继续使用888端口了,通过手动添加第三种bridge-host模式,可以把Docker容器模拟成一台新的客户端一样,容器会有自己的内网IP地址,端口独立分配,不会和群晖已占用的端口冲突。
三种网络方式对比
- Bridge:docker容器内部虚拟网桥,容器内部172.17.0.X网段,无法获取主机网络ip,访问容器需要映射端口,并且不能和主机占用端口冲突,不映射端口无法使用。
- Host:容器绑定到主机网卡使用主机的ip并且不能和主机占用端口冲突,使用哪些端口自动占用。
- bridge-host:通过主机的虚拟网卡来创建虚拟网桥,将容器的网卡绑定到这个直通局域网的虚拟网桥上,它的优点是容器获取到局域网ip,容器ip和群晖主机一个网段,端口1-65535全端口使用 不和主机冲突并且容易ip可手动指定,可以说模式就是把容器都桥接到你群晖所在的局域网
教程开始
打开群晖控制面板——网络——网络界面——管理——Open vSwitch设置
启用Open vSwitch
打开群晖控制面板——终端机和SNMP——启动SSH功能
用putty工具SSH登录进群晖并切换到root账户
1 2 | //群晖切换root账户 sudo -i |
执行创建网络命令,指令根据自己的IP网段修改,我的IP网段为192.168.0.X,网关地址为192.168.0.1,根据自己的需求修改
1 2 3 4 5 6 7 8 | //切换root权限 sudo -i //查询群晖网卡名称和IP地址 ip addr //创建bridge-host网络 docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=ovs_eth0 bridge-host //做了端口汇聚创建bridge-host网络 docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=ovs_bond0 bridge-host |
打开Docker,点击网络,可以看见我们创建的bridge-host
创建容器方法
网络可以在群晖docker面板——网络里面修改
注意:如果创建Docker容器的时候使用bridge-host网络模式,并不手动指定IP的话,默认会从192.168.x.2,192.168.x.3排列下去。
我们也可以手动指定容器的IP
1 2 3 4 | //容器绑定到桥接网卡,并指定ip --network bridge-host --ip=192.168.0.2 //举例:启动luodaoyi/kms-server映像命名为kms-server并使用bridge-host网络手动分配192.168.0.2IP地址 docker run -itd --restart=always --network bridge-host --ip=192.168.0.2 --name kms-server luodaoyi/kms-server |
本文转自http://www.chrno.cn/index.php/docker/19.html