Dockerfile正在缓存生成文件的旧版本

时间:2018-08-14 08:17:15

标签: docker containers dockerfile yarnpkg

我正在使用一个多阶段构建的Dockerfile。总体思路是为后端构建二进制文件,为前端构建javascript捆绑包,然后将这两件事放入应用程序的最终容器中。

这是docker文件:

# go binary
FROM golang:alpine as build-go
RUN apk --no-cache add git bzr mercurial
ENV D=/go/src/github.com/tamuhack-org/quack
RUN go get -d -v golang.org/x/net/html
RUN go get -d -v github.com/gorilla/handlers
RUN go get -d -v github.com/gorilla/mux
COPY ./main.go $D/main.go
COPY ./frontend/dist $D/frontend/dist
RUN rm -rf $D/frontend/dist/index.html
RUN rm -rf $D/frontend/dist/index.js
RUN cd $D && go build -o main && cp main /tmp/

# ui
FROM node:alpine AS build-node
RUN mkdir -p /src/ui
COPY ./frontend/package.json /src/ui/
RUN cd /src/ui && yarn install
COPY ./frontend /src/ui
# Replace the dev instance of index.html with the prod version.
RUN rm -rf /src/ui/dist/index.html
RUN mv /src/ui/dist/index-prod.html /src/ui/dist/index.html
RUN cd /src/ui && yarn build

# final
FROM alpine
RUN apk --no-cache add ca-certificates
WORKDIR /app/server/
COPY --from=build-go /tmp/main /app/server/
COPY --from=build-node /src/ui/dist /app/server/frontend/dist
EXPOSE 8080
CMD ["./main"]

我注意到的是,当我更新前端源代码并构建docker容器时,该容器的新版本不会随新捆绑包一起更新。 Dockerfile中是否有任何明显的错误,可能是为什么我没有看到任何文件更改的原因?如果我在本地运行yarn build,该捆绑包是准确的,但是docker容器似乎正在缓存旧版本。有想法吗?

0 个答案:

没有答案