【发布时间】:2018-09-25 01:34:18
【问题描述】:
我正在将 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 工具下载的模块?
【问题讨论】:
-
您始终可以在主机上执行构建,然后只需将二进制文件提供给您的容器......在我的情况下,编译发生在不同的容器内
-
请注意,您使用的是 go1.11rc2,它是一个候选版本,而不是最终的 go1.11 版本。
标签: docker go docker-compose vgo go-modules