问题描述
在使用jenkins将go代码打包成二级制rpm包的时候,在运行docker命令:
docker run -v $PWD:/go/src/github.com/xxx quay.io/influxdb/telegraf-ci:1.13.3 bash -c "go env -w GO111MODULE=on && go env -w GOPROXY=https://goproxy.cn,direct && cd /go/src/github.com/xxx && make package-standalone" --net host --env GOPROXY=https://goproxy.cn,direct
控制台总是报失败错误:
failed with error: go: collectd.org@v0.3.0: Get https://goproxy.cn/collectd.org/@v/v0.3.0.mod: dial tcp goproxy.cn: i/o timeout
问题分析
在尝试换了各种代理,修改主机/etc/resolvf.conf,在/etc/hosts中增加goproxy.cn的真实ip地址映射,均不能解决问题。
猜测问题跟docker中访问proxy存在问题。
问题解决
查看docker的配置,发现docker可以指定整个容器的DNS。
最终通过配置docker的DNS,问题得到解决。
- 修改宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
{
“dns” : [
“114.114.114.114”,
“8.8.8.8”
]
}
设置后,启动容器的 DNS 会自动配置为 114.114.114.114 和 8.8.8.8。 - 配置完,需要重启 docker 才能生效。
sudo service docker restart - 然后重新执行docker打包命令,不再出错,问题解决。