场景说明介绍:

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行说明:

  1. 加载的配置文件
    EnvironmentFile=-/etc/default/docker
  2. 然后在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

©著作权归作者所有:来自51CTO博客作者wjw555的原创作品,如需转载,请注明出处,否则将追究法律责任

如果文章对你有帮助,请赞赏

赞赏

0人进行了赞赏支持

更多相关文章

  1. 10:VMware Horizon View 8.0-证书配置,解决连接服务器后台证书报错
  2. 跨服务器操作数据库?其实很简单!(下)
  3. 9:VMware Horizon View 8.0-安装副本连接服务器
  4. 跨服务器操作数据库?其实很简单!(上)
  5. 用披萨来解释IaaS,PaaS,SaaS 的区别
  6. RHEL7 root 开启FTP服务
  7. CCNP(ISCW)实验:配置AAA支持Tacacs+
  8. 在OPNsense防火墙上使用HAProxy和“Let’s Encrypt”来续订SSL证
  9. 基于Cocos SDKHub接入华为HMS Game服务—浮标

随机推荐

  1. java的acm输入输出格式+大数语法
  2. java使用PinYin4j将汉字转换为拼音
  3. Java:创建程序以查找圆柱体的表面积和体积
  4. 企业分布式微服务云SpringCloud SpringBo
  5. 初用idea建立javaweb遇到的问题与心得
  6. Java递归实现算24
  7. 如何在Javascript中解析URL查询参数?(复
  8. JAVA 实现tail -f 日志文件监控功能
  9. Servlet也是一个Java类.为什么我不可以将
  10. 单例模式中的懒汉模式和饿汉模式