【问题标题】:How to access Go private repository using the Go Docker image in a multi-stage build?如何在多阶段构建中使用 Go Docker 镜像访问 Go 私有存储库?
【发布时间】:2021-04-19 04:04:18
【问题描述】:

我有以下 dockerfile:

FROM golang:1.16.3 as compile
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
# CGO_ENABLED for static linking library
RUN go env -w GOPRIVATE="github.com/<some_account>/*"; GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags "-X main.version=$1 -X main.build=`date -u +%Y%m%d.%H%M%S`" -o /app/server server.go

FROM scratch
#WORKDIR /
#FROM alpine:latest
#RUN apk --no-cache add ca-certificates

WORKDIR /root/
COPY --from=compile /app/server .
EXPOSE 80
EXPOSE 443
CMD ["./server"]

此文件位于我的 Golang 源代码中,我运行 docker build . 将可执行文件构建为 docker 映像。但是这段代码使用了来自 GitHub 的私有仓库的 Go 包。在第一阶段,它无法访问该私人仓库。在我的 RUN 语句中,我尝试设置 Go 环境 GOPRIVATE,但它不起作用。

ARG GOPRIVATE "github.com/&lt;some_account&gt;/*"ENV GOPRIVATE "github.com/&lt;some_account&gt;/*" 似乎也没有效果。

【问题讨论】:

    标签: docker go dockerfile


    【解决方案1】:

    您需要为您的构建环境授予对私有存储库的访问权限。在您的前期 Docker 构建中,生成一个带有访问令牌的.netrc 文件:

    # .netrc
    ## generate token with https://help.github.com/articles/creating-an-oauth-token-for-command-line-usee
    machine github.com login <token>
    

    这应该可以解决您的构建问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-12
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多