转到 mod 个未在 Docker 中找到的文件夹
Go mod folders not found in Docker
我对 go modules 很陌生,我正在尝试获取一个项目并更新它以使用它们,因为它们似乎是最终处理我的依赖项的一种非常好的方法。但是,我在 Docker.
中构建内容时遇到问题
我有一个包含 main.go
和 go.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
的东西应该可以工作。
我对 go modules 很陌生,我正在尝试获取一个项目并更新它以使用它们,因为它们似乎是最终处理我的依赖项的一种非常好的方法。但是,我在 Docker.
中构建内容时遇到问题我有一个包含 main.go
和 go.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
的东西应该可以工作。