docker网络模式默认使用的bridge模式,当我们创建容器时,每个容器会有它自己的虚拟网络接口连接到桥接网络docker0,并获取一个ip。可以通过ifconfig docker0查看docker0的信息,使用route -n命令可以看到。
docker会默认占用三个网段,172.17.0.0,172.18.0.0,172.19.0.0
在实际使用环境中,有可能咱们局域网内已经将这些网段分配到了其他的工作区域中,如果在这些工作区域中去访问此环境下的docker服务,是无法正常访问的。
那么这时候就只有两种解决办法,将已分配的工作区域的网段换成其他网段,或者将docker占用的网段指定成其他网段,显然前者相对来说成本要稍高些。
所以今天咱们就来看看如何将docker network占用的网段指定成其他的网段以避免ip冲突。
第一步停止docke服务,删除默认的桥接docker0网卡:
sudo service docker stopsudo ip link set dev docker0 downsudo brctl delbr docker0
提示下面问题,解决办法: yum install bridge-utils
root@localhost ~]# brctl
-bash: brctl: command not found
第二步 手动创建一个新的网桥名称为 bridge0:
sudo brctl addbr bridge0sudo ip addr add 192.188.0.0/16 dev bridge0 sudo ip link set dev bridge0 up
第三步 创建daenon.json文件:
vim /etc/docker/daemon.json{"bridge": "bridge0"}
提示:本以为此步骤完成后 重启docker服务就会把docker0默认的网卡删掉。但是事实不是这样的
第四步 解决重启docker服务,新绑定的bridge0失效,docker0网卡又自动恢复原样的问题:
CentOS7修改Docker默认启动参数:
[root@data-db01 ~]# cat /etc/default/docker#选择网桥DOCKER_OPTS="-b=bridge0"#指定DNS#DOCKER_OPTS="--dns 114.114.114.114 --dns 8.8.8.8"
下面的docker服务启动脚本添加了2行的配置文件说明:
[root@data-db01 ~]# cat /usr/lib/systemd/system/docker.service[Unit]Description=Docker Application Container EngineDocumentation=http://docs.docker.comAfter=network.targetWants=docker-storage-setup.serviceRequires=docker-cleanup.timer[Service]Type=notifyNotifyAccess=allKillMode=processEnvironmentFile=-/etc/default/docker ###加载的配置文件EnvironmentFile=-/etc/sysconfig/dockerEnvironmentFile=-/etc/sysconfig/docker-storageEnvironmentFile=-/etc/sysconfig/docker-networkEnvironment=GOTRACEBACK=crashEnvironment=DOCKER_HTTP_HOST_COMPAT=1Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbinExecStart=/usr/bin/dockerd-current \ --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \ --default-runtime=docker-runc \ --exec-opt native.cgroupdriver=systemd \ --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \ --init-path=/usr/libexec/docker/docker-init-current \ --seccomp-profile=/etc/docker/seccomp.json \ $OPTIONS \ $DOCKER_STORAGE_OPTIONS \ $DOCKER_NETWORK_OPTIONS \ $ADD_REGISTRY \ $BLOCK_REGISTRY \ $INSECURE_REGISTRY \ $DOCKER_OPTS ###需要引用的参数,也是网卡设定参数ExecReload=/bin/kill -s HUP $MAINPIDLimitNOFILE=1048576LimitNPROC=1048576LimitCORE=infinityTimeoutStartSec=0Restart=on-abnormalMountFlags=slave[Install]WantedBy=multi-user.target
添加的2行说明:
- 加载的配置文件
EnvironmentFile=-/etc/default/docker - 然后在ExecStart这个配置中,添加引用的参数,另外此前一行结尾要加 \
$DOCKER_OPTS
启动脚本修改参考文档:
https://blog.51cto.com/smilepad/2324171
#重载
systemctl daemon-reload
#重启docker服务
systemctl restart docker
#查看 docker 启动状态
systemctl status docker
第五、如果重启docker服务,发现默认的docker0网卡还在,那就继续执行下面的命令
sudo service docker stopsudo ip link set dev docker0 downsudo brctl delbr docker0
启动docker服务,直到生效为止
sudo service docker restart