我需要帮助,我正在go工作区中工作,在工作空间中有多个项目使用公共功能。因此,我所做的就是制作一个单独的模块,其中包含其他模块使用的所有公共功能。
当我们使用go工作区时,所有模块都可以共享它们的代码。
文件结构如下:
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.workProject1和Project2通过将它们导入到项目中来使用common/functionality.go中的功能。
当我在docker-compose up -d中运行project1命令时,它说您在项目中导入的公共模块不在GOROOT中。因为在这里,docker只包含目录Project1中的文件。
如何将Project1和Project2分别对接?
发布于 2022-06-28 10:18:35
要编译应用程序,编译器需要所有导入的包。当您构建一个码头映像时,context将确定哪些文件是可用的;在您的示例中,这将是Project1 (例如)。这意味着当您在go build中运行Dockerfile时,唯一可用的文件是Project1文件夹中的文件。编译器将检查工作区文件,但找不到(因为它不在上下文中)。
您可以通过更改context使其包含完整的工作区(例如Project1/docker-compose.yml )来解决这一问题。
project1:
build:
context: ../
dockerfile: Project1/dockerfile
environment:
....(您还需要更新您的Dockerfile,因为您将在子目录中进行复制等)。
然而,上面的内容并不理想(它在一定程度上违背了将项目放在单独的文件夹中的意义)。根据发布过程的不同,更好的选择可能是签入所有内容(例如,Git ),执行go get -u (更新go.mod),然后构建坞映像(允许从回购检索依赖项)。
https://stackoverflow.com/questions/72784081
复制相似问题