Go 应用构建 Docker 镜像 - 解决依赖下载慢、失败问题

Go 同时被 2 个专栏收录
2 篇文章 0 订阅
5 篇文章 0 订阅

Go 应用构建 Docker 镜像 - 解决依赖下载慢、失败问题

在使用 Docker 构建镜像时,发现依赖下载失败,应用安装很慢的问题,通过修改镜像源,使用代理解决了这个问题

原 Dockerfile

FROM golang:1.12.3-alpine3.9
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN apk add git
RUN go build -o main endgame/main.go
CMD ["/app/main"]

这个 Dockerfile 中,将当前的源码目录挂载到容器中,使用 alpine 镜像,安装 git 后下载依赖并编译;
但是在构建过程中,出现安装 Git 很慢,build 时依赖下载失败

解决 Git 安装慢的问题

  • 替换镜像源

使用阿里云的镜像,替换掉 Linux 默认的镜像,达到加速的效果

添加 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories ,将镜像源替换为阿里云

FROM golang:1.12.3-alpine3.9
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add git
RUN go build -o main endgame/main.go
CMD ["/app/main"]

再次编译,出现 Git 下载依赖很慢,给Git 使用添加代理(前提是本地要有 SS 或者 privoxy 等其他的代理)

解决 Git 下载依赖慢的问题

给 Git 指定代理,在 Dockerfile 中添加以下内容

RUN git config --global https.proxy http://127.0.0.1:1080
RUN git config --global https.proxy https://127.0.0.1:1080
FROM golang:1.12.3-alpine3.9
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add git
RUN git config --global https.proxy http://127.0.0.1:1080
RUN git config --global https.proxy https://127.0.0.1:1080
RUN go build -o main endgame/main.go
CMD ["/app/main"]

此外,构建镜像的命令也需要指定使用 host 模式进行构建

docker build -t endgame . --network host

再次构建,发现 golang.org 的依赖下载超时;因为 GFW 导致无法访问 golang.org,尽管已经将其加入 PAC 名单,但是依然访问不了

解决 golang.org 依赖下载失败的问题

  • 使用Golang的代理
    从 1.11 开始,go 支持使用代理访问镜像;可以参考 https://goproxy.io/

修改Dockerfile中的编译命令 RUN GOPROXY="https://goproxy.io" go build -o main endgame/main.go

FROM golang:1.12.3-alpine3.9
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add git
RUN git config --global https.proxy http://127.0.0.1:1080
RUN git config --global https.proxy https://127.0.0.1:1080
RUN GOPROXY="https://goproxy.io" go build -o main endgame/main.go
CMD ["/app/main"]

再次尝试,依然失败,发现依然失败,goproxy.io无法访问,将其替换为另一个代理gocenter.io

最终的 Dockerfile

FROM golang:1.12.3-alpine3.9
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add git
RUN git config --global https.proxy http://127.0.0.1:8118
RUN git config --global https.proxy https://127.0.0.1:8118
RUN GOPROXY="https://gocenter.io" GO111MODULE=on go build -o main endgame/main.go
CMD ["/app/main"]
  • 2
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页

打赏

呜呜呜啦啦啦

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值