场景说明介绍:
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行说明:
- 加载的配置文件
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 stop
sudo ip link set dev docker0 down
sudo brctl delbr docker0
启动docker服务,直到生效为止
sudo service docker restart