转到 mod 个未在 Docker 中找到的文件夹

Go mod folders not found in Docker

我对 go modules 很陌生,我正在尝试获取一个项目并更新它以使用它们,因为它们似乎是最终处理我的依赖项的一种非常好的方法。但是,我在 Docker.

中构建内容时遇到问题

我有一个包含 main.gogo.mod 文件的项目(它引用了 private/local 存储库以及 public 像 go.uber.org/zap 这样的存储库) .我将我的模块命名为 github.internal.com/team_name/project_name 我已经出售了我的依赖项。所以,我的项目结构如下:

project
- main.go
- internal
  - utils.go
- go.mod (github.internal.com/team_name/project_name)
- vendor
  - go.uber.org
  - private.repo.com
Dockerfile

然后,在main.go我导入

import (
    "github.internal.com/team_name/project_name/internal"
    "go.uber.org/zap"
)

所有这些都很好,我可以 运行 go build 没问题。

当我尝试使用 Docker 构建时出现问题。在我的 Docker 文件中我 运行

ENV GOPATH /go
COPY . /go/src/github.internal.com/team_name/project_name
WORKDIR /go/src/github.internal.com/team_name/project_name
RUN CGO_ENABLED=0 GOOS=linux go build -a -o slaxtract main.go

当我运行docker build它returns:

main.go:7:2: cannot find package "github.internal.com/team_name/project_name/internal" in any of:
    /go/src/github.internal.com/project_name/team_name/vendor/github.internal.com/project_name/team_name/internal (vendor tree) 
    /usr/local/go/src/github.internal.com/team_name/project_name/internal (from $GOROOT)
    /go/src/github.internal.com/team_name/project_name/internal (from $GOPATH)

如何进入正确的目录以识别模块中的所有文件?

提前致谢!

确保 go 启用了 go 模块,您可以通过将环境变量 GO111MODULE 设置为 on.

来强制执行此操作

此外,当您销售模块依赖项时,您应该使用 mod=vendor 标志构建为:go build -mod=vendor

类似 CGO_ENABLED=0 GOOS=linux GO111MODULE=on go build -mod=vendor -a -o slaxtract main.go 的东西应该可以工作。