事情是这样的:
前阵子买了 Godaddy 的服务器,然而使用 docker 部署 golang 项目时,发现无法安装依赖,一直在超时。
我在其他厂商的运行以下命令在容器中是可以 curl 到响应的 : docker run -i -t nginx curl baidu.com
,然而在 Godaddy 买的就不行,提示超时或无主机(宿主机是可以使用 curl 的)。
尝试过在宿主机起个 server,然后容器通过 172.0xx 是可以访问到,其他域名一律不可以。
于是我查看了 dorker bridge 的区别,仅仅是在 IPAM.Config 多了个 gateway。
正常:
异常:
我曾尝试做了以下工作:
- 更改 /etc/resolv.conf 的
nameserver:8.8.8.8
不行 - 反复重启 docker
- 升级 docker 到20+
- 升级 ubuntu 到 18+
- 搜索了大量方案
找到了临时解决的方案:https://segmentfault.com/a/11... 。
问题表现
- 容器内部 ping 不通外网
docker run --rm alpine ping -c 2 baidu.com
netstat -ntlp
没有发现端口53
执行ip a命令看下docker0 网桥的ip地址在不在,这个问题就是缺少网关吧,容器访问外网的路径应该是容器ip--docker0网桥ip--默认网关