我有一个带有大型供应商/目录的Go项目,几乎从未改变过.
我正在尝试使用新的go 1.10构建缓存功能来加速我在本地Docker引擎中的构建.
避免重新编译我的供应商/目录就足够了.所以我正在尝试将Go等效于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)
同样我试过:
FROM golang:1.10-alpine
COPY ./vendor ./src/myproject/vendor
RUN go build -v myproject/vendor/... # <-- pre-build & cache "vendor/"
COPY . ./src/myproject
然而,这是“无法找到包”错误(可能是因为您无法在供应商/直接正常构建东西).
有没有人能够解决这个问题?
最佳答案
这是适合我的东西:
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
它确保首先安装出售的库.只要你不改变图书馆,你就是好的.