解决docker服务默认网卡和宿主机网卡内网段冲突

场景说明介绍:

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 stop
sudo ip link set dev docker0 down
sudo brctl delbr docker0
  • 1.
  • 2.
  • 3.

提示下面问题,解决办法: yum install bridge-utils
root@localhost ~]# brctl
-bash: brctl: command not found

第二步 手动创建一个新的网桥名称为 bridge0:

sudo brctl addbr bridge0
sudo ip addr add 192.188.0.0/16 dev bridge0 
sudo ip link set dev bridge0  up
  • 1.
  • 2.
  • 3.

第三步 创建daenon.json文件:

vim /etc/docker/daemon.json
{
"bridge": "bridge0"
}
  • 1.
  • 2.
  • 3.
  • 4.

**提示:**本以为此步骤完成后 重启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"
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

下面的docker服务启动脚本添加了2行的配置文件说明:

[root@data-db01 ~]# cat  /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer

[Service]
Type=notify
NotifyAccess=all
KillMode=process
EnvironmentFile=-/etc/default/docker  ###加载的配置文件
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/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 $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
MountFlags=slave

[Install]
WantedBy=multi-user.target
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.

添加的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 stop
sudo ip link set dev docker0 down
sudo brctl delbr docker0
  • 1.
  • 2.
  • 3.

启动docker服务,直到生效为止
sudo service docker restart

posted @   勤奋的蓝猫  阅读(30)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
点击右上角即可分享
微信分享提示