来自 docker build docs ,您可以指定带有阶段名称的 --target
标志来构建它。此外,multi-stage build docs 中也指定了相同的内容。 .
When you build your image, you don’t necessarily need to build the entire Dockerfile including every stage. You can specify a target build stage. The following command assumes you are using the previous Dockerfile but stops at the stage named builder:
$ docker build --target builder -t alexellis2/href-counter:latest .
我有一个 Dockerfile 来构建我的项目。它有多个阶段:
# development
FROM node:carbon as development
...
# e2e tests
FROM node:carbon as puppeteer
...
COPY --chown=puppeteer:puppeteer --from=development /app /home/puppeteer
...
# prod build
FROM node:carbon as build
...
# prod image behind webserver
FROM nginx as prod
...
COPY --from=build /app/build /usr/share/nginx/html
...
当我尝试为 prod
阶段构建时:
docker build -t my-app --target prod .
我看到它正在构建所有阶段的日志,导致构建需要很长时间。
我希望它只构建我指定的目标(及其阶段“依赖”),以便它构建 build
阶段,然后是 prod
阶段。
我做错了什么或者我错过了什么?
注意:我也知道,也许我对多阶段构建的功能有错误的期望,但是文档听起来好像您可以构建您想要的目标而不是整个文件,所以我'我会假设是这样的。
最佳答案
从 Docker 18.09 开始,您可以使用 BuildKit .好处之一是跳过未使用的阶段,因此您只需使用 DOCKER_BUILDKIT=1 docker build -t my-app --target prod 进行构建。
关于docker - 使用 --target 标志构建多阶段 Dockerfile 会构建所有阶段,而不仅仅是指定的阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51253987/