首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要帮助在Go工作区(多模块)模式下创建Docker容器

需要帮助在Go工作区(多模块)模式下创建Docker容器
EN

Stack Overflow用户
提问于 2022-06-28 09:37:39
回答 1查看 331关注 0票数 4

我需要帮助,我正在go工作区中工作,在工作空间中有多个项目使用公共功能。因此,我所做的就是制作一个单独的模块,其中包含其他模块使用的所有公共功能。

当我们使用go工作区时,所有模块都可以共享它们的代码。

文件结构如下:

代码语言:javascript
复制
Workspace
│
├── Project1
│      ├── main.go
│      ├── docker-compose.yml
│      ├── Dockerfile
│      └── go.mod
│
├── Project2
│      ├── main.go
│      ├── docker-compose.yml
│      ├── Dockerfile
│      └── go.mod
│
├── Common
│      ├── functionality.go
│      └── go.mod
│
└── go.work

Project1和Project2通过将它们导入到项目中来使用common/functionality.go中的功能。

当我在docker-compose up -d中运行project1命令时,它说您在项目中导入的公共模块不在GOROOT中。因为在这里,docker只包含目录Project1中的文件。

如何将Project1Project2分别对接?

EN

回答 1

Stack Overflow用户

发布于 2022-06-28 10:18:35

要编译应用程序,编译器需要所有导入的包。当您构建一个码头映像时,context将确定哪些文件是可用的;在您的示例中,这将是Project1 (例如)。这意味着当您在go build中运行Dockerfile时,唯一可用的文件是Project1文件夹中的文件。编译器将检查工作区文件,但找不到(因为它不在上下文中)。

您可以通过更改context使其包含完整的工作区(例如Project1/docker-compose.yml )来解决这一问题。

代码语言:javascript
复制
project1:
    build:
      context: ../
      dockerfile: Project1/dockerfile
    environment:
      ....

(您还需要更新您的Dockerfile,因为您将在子目录中进行复制等)。

然而,上面的内容并不理想(它在一定程度上违背了将项目放在单独的文件夹中的意义)。根据发布过程的不同,更好的选择可能是签入所有内容(例如,Git ),执行go get -u (更新go.mod),然后构建坞映像(允许从回购检索依赖项)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72784081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档