我有一个带有大型vendor/目录的Go项目,几乎从不改变.
我正在尝试使用新的go 1.10 构建缓存功能来加速我在本地Docker引擎中的构建.
避免重新编译我的vendor/目录就足够了.所以我试着去做与Python相同的常见Dockerfile模式:
FROM python
COPY requirements.txt . # <-- copy your dependency list
RUN pip install -r requirements.txt # <-- install dependencies
COPY ./src ... # <-- your actual code (everything above is cached)
Run Code Online (Sandbox Code Playgroud)
同样我试过:
FROM golang:1.10-alpine
COPY ./vendor ./src/myproject/vendor
RUN go build -v myproject/vendor/... # <-- pre-build & cache "vendor/"
COPY . ./src/myproject
Run Code Online (Sandbox Code Playgroud)
然而,这是"无法找到包"错误(可能是因为您无法在供应商/正常直接构建内容).
有没有人能够解决这个问题?
这是对我有用的东西:
FROM golang:1.10-alpine
WORKDIR /usr/local/go/src/github.com/myorg/myproject/
COPY vendor vendor
RUN find vendor -maxdepth 2 -mindepth 2 -type d -exec sh -c 'go install -i github.com/myorg/myproject/{}/... || true' \;
COPY main.go .
RUN go build main.go
Run Code Online (Sandbox Code Playgroud)
它确保首先安装供应商的库。只要你不改变图书馆,你就很好。
| 归档时间: |
|
| 查看次数: |
2182 次 |
| 最近记录: |