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 关注
- 162 浏览
添加回答
举报