2 回答

TA貢獻1825條經驗 獲得超6個贊
您應該將環境變量更改GO111MODULE為 auto。
最終的 Dockerfile 是:
FROM golang:1.13 as builder
ENV GO111MODULE=auto
WORKDIR /go/src/app
COPY ./tools ./tools
COPY ./service1 ./service1
WORKDIR /go/src/app/tools
RUN go mod download
WORKDIR /go/src/app/service1
RUN go mod download
WORKDIR /go/src/app
RUN go build -o server /go/src/app/service1/main.go
FROM centos:7
RUN yum -y update && yum clean all
COPY --from=builder /go/src/app/server .
EXPOSE 3000
CMD ["./server"]
更新
在我看來,如果 GO111MODULE 等于 'auto',golang 將禁用模塊功能,并在 GOPATH 中查找第三方包。在編譯代碼之前,您應該go get -u github.com/op/go-logging. 我想這不是你想要的。
根據此處的示例,我在此處更新了我的存儲庫。您可以嘗試在 docker 容器中構建代碼。它可以構建成功,但您應該更改包名稱。

TA貢獻1836條經驗 獲得超5個贊
對于面臨類似問題的任何人 - 我使用該vendor目錄解決了類似問題?;旧?,您通過運行下載主機上的依賴項,go mod vendor然后它們將自動復制到 docker 容器中。
從 Dockerfile 中,您必須刪除RUN go mod download,并且還需要使用-mod=vendor標志修改構建命令。
要構建 docker 映像,您需要運行這些命令
go mod vendor
docker build . -t image-name
我希望這會對某人有所幫助。我在這里找到了這個解決方案:https ://smartystreets.com/blog/2018/09/private-dependencies-in-docker-and-go/
- 2 回答
- 0 關注
- 202 瀏覽
添加回答
舉報