ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-03-12 07:52:52  阅读:159  来源: 互联网

标签:sudo 网段 -- 宿主机 网卡 docker0 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

提示下面问题,解决办法: 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

第三步 创建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 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

添加的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

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

标签:sudo,网段,--,宿主机,网卡,docker0,docker
来源: https://blog.51cto.com/wujianwei/2656527

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有