带有 Dockerfile/go.mod 文件的私有仓库的 Go 构建失败
Go build is failing for private repo with Dockerfile/go.mod files
正在尝试使用 Dockerfile 构建映像,但出现以下错误:
[6/7] 运行 去 mod 下载 && 去 mod 验证:
#10 4.073 go: github.com/private-repo/repo-name@v0.0.0-20210608233213-12dff748001d: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /app/pkg/mod/cache/vcs/40ae0075df7a81e12f09aaa30354204db332938b8767b01daf7fd56ca3ad7956: exit status 128:
#10 4.073 git@github.com: Permission denied (publickey).
#10 4.073 fatal: Could not read from remote repository.
#10 4.073 Please make sure you have the correct access rights
#10 4.073 and the repository exists.
------
executor failed running [/bin/sh -c go mod download && go mod verify]: exit code: 1
这是我的 Dockerfile:
#Start from base image 1.16.5:
FROM golang:1.16.5
ARG SSH_PRIVATE_KEY
ENV ELASTIC_HOSTS=localhost:9200
ENV LOG_LEVEL=info
#Configure the repo url so we can configure our work directory:
ENV REPO_URL=github.com/private-repo/repo-name
#Setup out $GOPATH
ENV GOPATH=/app
ENV APP_PATH=$GOPATH/src/$REPO_URL
#/app/src/github.com/private-repo/repo-name/src
#Copy the entire source code from the current directory to $WORKPATH
ENV WORKPATH=$APP_PATH/src
COPY src $WORKPATH
WORKDIR $WORKPATH
RUN mkdir -p ~/.ssh && umask 0077 && echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa \
&& git config --global url."ssh://git@github.com/private-repo".insteadOf
https://github.com \
&& ssh-keyscan github.com >> ~/.ssh/known_hosts
#prevent the reinstallation of vendors at every change in the source code
COPY go.mod go.sum $WORKDIR
RUN go mod download && go mod verify
RUN go build -x -o image-name .
#Expose port 8081 to the world:
EXPOSE 8081
CMD ["./image-name"]
在我的 GO 环境中,我确实有 GO111MODULE=on & GOPRIVATE=github.com/private-repo/*
此外,我可以在我的终端进行身份验证:
ssh -T git@github.com
嗨私人回购!您已成功通过身份验证,但 GitHub 不提供 shell 访问权限。
'go get private-repo-name'成功。
我通过 Dockerfile 构建:
docker build --build-arg SSH_PRIVATE_KEY -t image-name .
其中有命令:
RUN go build -x -o image-name .
我试过的:
GO111MODULE="on"
GONOPROXY="github.com/user-id/*"
GONOSUMDB="github.com/user-id/*"
GOPRIVATE="github.com/user-id/*"
GOPROXY="https://proxy.golang.org,direct"
[url "ssh://git@github.com/"]
insteadOf = https://github.com/
Basically, there are multiple repos under github.com/user-name/
and all of them are private which I want to use.
我宁愿使用更具体的指令:
git config --global \
url."ssh://git@github.com/user-name/*".insteadOf https://github.com/user-name/*
这样,代替将不会应用于 所有 https://github.com
URL,仅适用于与您需要使用 SSH 的私有存储库匹配的 URL。
OP ios-mxe confirms in 它确实按预期工作。
正在尝试使用 Dockerfile 构建映像,但出现以下错误:
[6/7] 运行 去 mod 下载 && 去 mod 验证:
#10 4.073 go: github.com/private-repo/repo-name@v0.0.0-20210608233213-12dff748001d: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /app/pkg/mod/cache/vcs/40ae0075df7a81e12f09aaa30354204db332938b8767b01daf7fd56ca3ad7956: exit status 128:
#10 4.073 git@github.com: Permission denied (publickey).
#10 4.073 fatal: Could not read from remote repository.
#10 4.073 Please make sure you have the correct access rights
#10 4.073 and the repository exists.
------
executor failed running [/bin/sh -c go mod download && go mod verify]: exit code: 1
这是我的 Dockerfile:
#Start from base image 1.16.5:
FROM golang:1.16.5
ARG SSH_PRIVATE_KEY
ENV ELASTIC_HOSTS=localhost:9200
ENV LOG_LEVEL=info
#Configure the repo url so we can configure our work directory:
ENV REPO_URL=github.com/private-repo/repo-name
#Setup out $GOPATH
ENV GOPATH=/app
ENV APP_PATH=$GOPATH/src/$REPO_URL
#/app/src/github.com/private-repo/repo-name/src
#Copy the entire source code from the current directory to $WORKPATH
ENV WORKPATH=$APP_PATH/src
COPY src $WORKPATH
WORKDIR $WORKPATH
RUN mkdir -p ~/.ssh && umask 0077 && echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa \
&& git config --global url."ssh://git@github.com/private-repo".insteadOf
https://github.com \
&& ssh-keyscan github.com >> ~/.ssh/known_hosts
#prevent the reinstallation of vendors at every change in the source code
COPY go.mod go.sum $WORKDIR
RUN go mod download && go mod verify
RUN go build -x -o image-name .
#Expose port 8081 to the world:
EXPOSE 8081
CMD ["./image-name"]
在我的 GO 环境中,我确实有 GO111MODULE=on & GOPRIVATE=github.com/private-repo/*
此外,我可以在我的终端进行身份验证:
ssh -T git@github.com
嗨私人回购!您已成功通过身份验证,但 GitHub 不提供 shell 访问权限。
'go get private-repo-name'成功。
我通过 Dockerfile 构建:
docker build --build-arg SSH_PRIVATE_KEY -t image-name .
其中有命令:
RUN go build -x -o image-name .
我试过的:
GO111MODULE="on"
GONOPROXY="github.com/user-id/*"
GONOSUMDB="github.com/user-id/*"
GOPRIVATE="github.com/user-id/*"
GOPROXY="https://proxy.golang.org,direct"
[url "ssh://git@github.com/"]
insteadOf = https://github.com/
Basically, there are multiple repos under
github.com/user-name/
and all of them are private which I want to use.
我宁愿使用更具体的指令:
git config --global \
url."ssh://git@github.com/user-name/*".insteadOf https://github.com/user-name/*
这样,代替将不会应用于 所有 https://github.com
URL,仅适用于与您需要使用 SSH 的私有存储库匹配的 URL。
OP ios-mxe confirms in