问题描述

在使用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打包命令,不再出错,问题解决。
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐