登录
首页 >  Golang >  Go问答

Docker容器中缺少Go mod目录

来源:stackoverflow

时间:2024-03-13 19:09:25 168浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《Docker容器中缺少Go mod目录》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

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

我有一个包含 main.gogo.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)

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

提前致谢!


解决方案


确保 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 应该可以工作。

今天关于《Docker容器中缺少Go mod目录》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>