Контекст выглядит следующим образом:
- Jenkins
- Плагин Kubernetes
- Docker -in-Docker / dind-контейнер
- Multi Dockerfile
Поток выглядит следующим образом:
- pull builder
docker pull repo/image:builder
- build builder
DOCKER_BUILDKIT=1 docker build . --build-arg BUILDKIT_INLINE_CACHE=1 --target builder --cache-from repo/image:builder --tag repo/image:builder
- pu sh builder
docker push repo/image:builder
- pull image
docker pull repo/image:tag
- build image
DOCKER_BUILDKIT=1 docker build . --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from repo/image:builder --cache-from repo/image:tag --tag repo/image:tag
- pu sh image
docker push repo/image:tag
Dockerfile:
FROM node:8.16.0 as builder
WORKDIR /app
RUN mkdir /app/frontend
COPY frontend/package.json /app/frontend/
WORKDIR /app/frontend
RUN npm install
COPY frontend /app/frontend
RUN npm run build
FROM nginx:1.13.8-alpine
WORKDIR /project/web
COPY --from=builder --chown=nginx:nginx /app/frontend/built /project/web/public
При COPY --from=builder --chown=nginx:nginx /app/frontend/built /project/web/public
сборка docker застревает навсегда (через 30-40 минут, после чего я останавливаю ее вручную) без ошибок.
РЕДАКТИРОВАТЬ: При при первом запуске, когда образы еще не представлены в реестре, кэширование компоновщика и COPY --from=builder
работает, как ожидается. Только со второй сборки он застревает на COPY --from=builder