我正在将Go 1.10应用程序迁移到Go 1.11。这还包括从dep
迁移到mod
来管理依赖性。
由于应用程序依赖于数据库,因此我正在使用docker-compose
来设置本地开发环境。使用Go 1.10,我只需将本地存储库(包括vendor
文件夹)安装到容器的GOPATH
中的正确位置:
web:
image: golang:1.10
working_dir: /go/src/github.com/me/my-project
volumes:
- .:/go/src/github.com/me/my-project
environment:
- GOPATH=/go
- PORT=9999
command: go run cmd/my-project/main.go
从Go 1.11挖沟GOPATH
开始(使用模块时),我认为我可以做以下事情:
web:
image: golang:1.11rc2
working_dir: /app
volumes:
- .:/app
environment:
- PORT=9999
command: go run cmd/my-project/main.go
这可行,但是每次我docker-compose up
(或任何其他调用Go工具的命令)时,它将解析并重新下载依赖关系树。当我在容器外部(即在我的本地操作系统上)运行命令时,这不会发生(而是一次)。
如何改善设置,以便Docker容器保留go
工具正在下载的模块?
答案 0 :(得分:4)
有关模块的Wiki文章中未提及,但是通过阅读go tool上的更新文档,我发现使用Go模块时,go
工具仍将使用{{1 }}来存储可用资源,即GOPATH
。
这意味着对于我的本地开发人员设置,我可以1.在容器中定义$GOPATH/pkg/mod
并2.将本地GOPATH
安装到容器的GOPATH中。
$GOPATH/pkg/mod
答案 1 :(得分:2)
您可以使用卷代替本地GOPATH
。 docker-compose.yml就像:
version: '3'
services:
web:
image: golang:1.11
working_dir: /app
volumes:
- .:/app
- cache:/go
environment:
- PORT=9999
command: go run cmd/my-project/main.go
volumes:
cache:
卷cache
将所有更改保留在容器的GOPATH上。