首先Dockerfiles作曲,这是我的项目层次:多克尔 - 撰写:与需要相对进口
myproj/
- commons1/
- com1_file1.go
- ...
- commons2/
- com2_file1.go
- ...
- module1/
- mod1_file1.go
- Dockerfile
- ...
- module2/
- mod2_file1.go
- Dockerfile
- ...
- docker-compose.yml
我想要做的是,当module1
和module2
容器启动时,他们每个人都有GOPATH
的所有commonsN
目录的副本,以便每个目录都可以访问由commonsN
目录中的每一个公开的公共库。
例如,我想看看在容器像这样的module1
:
/go/
- src/
- commons1/
- com1_file1.go
- ...
- commons2/
- com2_file1.go
- ...
- module1/
- mod1_file1.go
- ...
原因是是,这基本上是如何在我的本地GOPATH
长相(加场的其他模块),这样我可以做这样的事情在我的源文件:
package main
import(
"fmt"
"myproj/commons1"
)
func main() {
fmt.Println("Some thing from common library :", commons1.SomethingFromCommons)
}
从我泊坞窗天真理解,似乎我不能改变我的Dockerfiles沿的线做一些事情,所以我想知道如何去完成这个?
我强烈希望不要去Github路由,因为源代码都在公司代理之后,而且我想象的是配置所有这些将比仅仅复制一些目录更长。
编辑 我已经更新了我的docker-compose.yml
文件,看起来每建议像这样从BARAT:
version: '2'
services:
module1:
volumes:
- ./commons1:/go/src/myproj/commons1
build: module1/
Dockerfile为module1
看起来是这样的:
FROM golang:1.8.0
RUN mkdir -p /go/src/app
WORKDIR /go/src/app
COPY . /go/src/app
RUN go get -d -v
RUN go install -v
ENTRYPOINT /go/bin/app
EXPOSE 8080
docker-compose build
失败的go get -d -v
有错误:
package myproj/commons1: unrecognized import path "myproj/commons1" (import path does not begin with hostname)
如果myproj/commons1
被复制到/go/src/
,那么这不应该是一个问题吗?我猜,那么它还没有被复制过呢?
但在泊坞窗,构成可以绑定贴装您的主机卷/目录... https://docs.docker.com/compose/compose-file/#volumes-volumedriver – barat
好了啊,我读了但我不完全确定这是如何工作的。我是否只需在撰写文件中的'volumes'下添加一行如'./commons1:/ go/src/commons1'作为音量? – rawa
是 - 左边部分(之前:)是您的主机路径,右边部分(之后:)定义容器内的装载点。你可以使用多个:) – barat