背景
默认情况下启动docker之后会自己创建一个名为 docker0
的网桥。但是里面的ip配置可能不是自己期望或是与某些公司内部的网关冲突了,造成不必要的麻烦。
而我遇到的问题刚好就是异地办公司的网关跟默认docker0
网关刚好一至,造成移动同事无法访问该服务器地址。
如何解决?
修改默认的配置文件 /etc/docker/daemon.json
对Docker进行配置。
如果服务已经开始需要先停止服务,并删除旧的网络。
$ sudo service docker stop
$ sudo ip link set dev docker0 down
$ sudo brctl delbr docker0
修改 /etc/docker/daemon.json
以下代码是我的范例
{
"bip": "192.188.0.1/16",
"registry-mirrors": [
"https://a73cc22x.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com",
"http://c0d14726.m.daocloud.io",
"https://registry.aliyuncs.com"
]
}
重启Doker服务:
$ sudo service docker start
查看配置是否成功
$ ifconfig docker0
docker0 Link encap:Ethernet HWaddr 02:42:38:60:08:25
inet addr:192.188.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
另外一种操作
类似的也需要删除旧的docker0如果已经启动docker服务先关闭了再删除。
手动创建一个新的网桥名称为 bridge0
$ sudo brctl addbr bridge0
$ sudo ip addr add 192.188.0.1/16 dev bridge0
$ sudo ip link set dev bridge0 up
查看确认网桥创建并启动。
$ ip addr show bridge0
4: bridge0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state UP group default
link/ether 66:38:d0:0d:76:18 brd ff:ff:ff:ff:ff:ff
inet 192.188.0.1/16 scope global bridge0
valid_lft forever preferred_lft forever
在 Docker 配置文件/etc/docker/daemon.json
中添加如下内容,即可将 Docker 默认桥接到 创建的网桥上。
{
"bridge": "bridge0",
}
再次启动docker服务
$ sudo service docker start
Trick
如何查看电脑的路由信息,确定自己到底哪个网关冲突了?
执行以下命令:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.16.3.1 0.0.0.0 UG 0 0 0 enp0s31f6
192.16.3.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s31f6
192.38.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-8658c245b375
192.128.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-18e510164f90
192.133.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-d6fb5b3db5a7
192.188.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
总结
通过以上的操作应该能帮你解决需要的问题。