0

我是一个非常新的模块,我正在尝试一个项目并更新它以使用它们,因为它们似乎是最终处理我的依赖项的好方法。但是,我在 Docker 中构建东西时遇到了问题。

我有一个带有一个main.go和一个go.mod文件的项目(它引用了私有/本地存储库以及公共存储库,例如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 构建时,问题就出现了。在我的 Dockerfile 中,我运行

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它返回:

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)

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

提前致谢!

4

1 回答 1

2

确保 go 启用了 go 模块,您可以通过将 env var 设置GO111MODULEon.

此外,当您出售了您的模块依赖项时,您应该使用以下mod=vendor标志构建:go build -mod=vendor

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

于 2019-07-19T17:45:26.847 回答