docker编译go代码时报dial tcp xxx.xxx.xxx.xxx io timeout错误

问题描述

在使用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,问题得到解决。

  1. 修改宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
    {
    “dns” : [
    “114.114.114.114”,
    “8.8.8.8”
    ]
    }
    设置后,启动容器的 DNS 会自动配置为 114.114.114.114 和 8.8.8.8。
  2. 配置完,需要重启 docker 才能生效。
    sudo service docker restart
  3. 然后重新执行docker打包命令,不再出错,问题解决。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值