这两天遇到一个奇怪的问题:开开心心连上服务器,准备跑上本身的服务。为了方便部署,固然是先安装 Docker 了。开开心心的安装,写 Dockerfile,写完了跑起来!访问,懵逼了,没法访问,直接 ping 不通了。由于是忽然发现这个问题,没有太怀疑 Docker 的问题,只是把 Docker 关了后发现依旧不行,就排除 Docker 了。docker
出问题后能够 ssh 登录服务器,可是服务器 ping 不通,也不能访问。shell
贼心不死,再申请了个服务器,此次学聪明了,先 ping 一下,发现能够 ping 通,而后装上 Docker 再 ping 一下,凉了!问题定位,就是 Docker 的锅!那怎么办呢?json
肯定是 Docker 的锅就好办了,一番 Google,发现了有类似的问题。bash
一句话解释:原来是 Docker 和宿主机的网段冲突了,改了网段就行了。服务器
Docker 容器网络默认使用的是 bridge 桥接模式,通常容器会使用 daemon.json
中定义的虚拟网桥来与宿主机进行通讯。markdown
下面分别是 Linux 和 Mac 修改 Docker 默认网段的方法。网络
sudo service docker stop
sudo ip link set dev docker0 down
sudo brctl delbr docker0
sudo iptables -t nat -F POSTROUTING
复制代码
sudo brctl addbr docker0
sudo ip addr add 172.17.10.1/24 dev docker0
sudo ip link set dev docker0 up
复制代码
vi /etc/docker/daemon.json -bash-4.2$ cat /etc/docker/daemon.json { "bip":"172.17.10.1/24" } # 注意就是将 bip 的值改为新设置的网段 复制代码
打开 Preferences -> Advanced,修改 Docker subnet 配置 172.17.10.1/24
,从而避免网段冲突的问题。ssh