Docker 多阶段构建从前一阶段复制失败
Docker Multistage Build Fails on copy from previous stage
我正在处理一个多阶段 docker 构建文件,试图向我们的基础 tomcat 映像添加一个额外的 war 文件。我在 windows 10 工作站上 运行 在本地 Docker 为 Windows 版本 2.3.0.4 使用 docker 引擎版本 19.03.12[=22] =]
我原来的docker文件看起来像这样
FROM tomcat:9.0.21-jdk8-openjdk
RUN rm -rf /usr/local/tomcat/webapps/*
COPY logging.properties /usr/local/tomcat/conf
COPY tomcat-users.xml /usr/local/tomcat/conf
COPY jt400-jdk8-9.7.jar /usr/local/tomcat/lib
COPY mysql-connector-java-8.0.12.jar /usr/local/tomcat/lib
COPY ojdbc6.jar /usr/local/tomcat/lib
COPY hazelcast-all-3.12.jar /usr/local/tomcat/lib
COPY hazelcast-tomcat85-sessionmanager-1.1.3.jar /usr/local/tomcat/lib
COPY hazelcast-client.xml /usr/local/tomcat/lib
COPY applicationinsights-agent-2.5.1.jar /usr/local/tomcat/lib
我想做的是从源代码构建 psi-probe 并将 war 文件添加到此基础映像。
这是我目前所拥有的
FROM maven:3.6.3-openjdk-8 as buildprobe
RUN git clone https://github.com/psi-probe/psi-probe && cd psi-probe
WORKDIR /psi-probe
RUN mvn package && ls -l /psi-probe && ls -l /psi-probe/psi-probe-web/target
FROM tomcat:9.0.21-jdk8-openjdk
RUN rm -rf /usr/local/tomcat/webapps/*
COPY --from=buildprobe /psi-probe/psi-probe-web/taget/probe.war /usr/local/tomcat/webapps
我可以 运行 docker build --target buildprobe -t buildprobe -f Dockerfile .
并且输出已构建。
NOTE: I added the ls commands after mvn package
in an attempt to "debug" what going on
maven 包和两个 ls 命令的输出是 (t运行cated)
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for psi-probe 3.5.1-SNAPSHOT:
[INFO]
[INFO] psi-probe .......................................... SUCCESS [01:07 min]
[INFO] psi-probe-core ..................................... SUCCESS [01:53 min]
[INFO] psi-probe-rest ..................................... SUCCESS [ 5.945 s]
[INFO] psi-probe-tomcat7 .................................. SUCCESS [ 14.019 s]
[INFO] psi-probe-tomcat85 ................................. SUCCESS [ 13.403 s]
[INFO] psi-probe-tomcat9 .................................. SUCCESS [ 9.391 s]
[INFO] psi-probe-web ...................................... SUCCESS [ 39.060 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 04:30 min
[INFO] Finished at: 2020-08-12T14:39:19Z
[INFO] ------------------------------------------------------------------------
(ls -l /psi-probe)
...
-rw-r--r-- 1 root root 70248 Aug 12 14:29 pom.xml
drwxr-xr-x 1 root root 4096 Aug 12 14:36 psi-probe-core
drwxr-xr-x 1 root root 4096 Aug 12 14:38 psi-probe-rest
drwxr-xr-x 3 root root 4096 Aug 12 14:29 psi-probe-tomcat10
drwxr-xr-x 1 root root 4096 Aug 12 14:38 psi-probe-tomcat7
drwxr-xr-x 1 root root 4096 Aug 12 14:38 psi-probe-tomcat85
drwxr-xr-x 1 root root 4096 Aug 12 14:38 psi-probe-tomcat9
drwxr-xr-x 1 root root 4096 Aug 12 14:38 psi-probe-web
drwxr-xr-x 3 root root 4096 Aug 12 14:29 src
...
(ls -l /psi-probe/psi-probe-web/target)
drwxr-xr-x 2 root root 4096 Aug 12 14:38 classes
drwxr-xr-x 3 root root 4096 Aug 12 14:39 jspc
drwxr-xr-x 2 root root 4096 Aug 12 14:39 maven-archiver
drwxr-xr-x 7 root root 4096 Aug 12 14:39 probe
-rw-r--r-- 1 root root 27372423 Aug 12 14:39 probe.war
drwxr-xr-x 2 root root 4096 Aug 12 14:39 test-classes
-rw-r--r-- 1 root root 33350 Aug 12 14:39 webfrag.xml
然而,当构建进入阶段 1 (FROM tomcat:9.0.21-jdk8-openjdk
) 时,它在 COPY
命令上失败
COPY failed: stat /var/lib/docker/overlay2/81826a6b59d58818c342f1d5536489f4658be5e8557084ec572780aaf6ea19bc/merged/psi-probe/psi-probe-web/taget/probe.war: no such file or directory
我有一个类似的 docker 文件用于我正在开发的 angular 应用程序。该文件内容如下:
FROM node AS build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json /app/package.json
RUN npm install && npm install -g @angular/cli
COPY . /app
RUN ng build --output-path=dist
FROM nginx
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
在此文件中,前一阶段的 COPY
工作正常并且图像构建
我只是不确定尝试从源构建 psi-probe 然后将输出包含在我的 tomcat 图像中出了什么问题。
这将完成工作:
FROM maven:3.6.3-openjdk-8 as buildprobe
RUN git clone https://github.com/psi-probe/psi-probe && cd psi-probe
WORKDIR /psi-probe
RUN mvn package && ls -l /psi-probe && ls -l /psi-probe/psi-probe-web/target
FROM tomcat:9.0.21-jdk8-openjdk
RUN rm -rf /usr/local/tomcat/webapps/*
COPY --from=buildprobe /psi-probe/psi-probe-web/target/probe.war /usr/local/tomcat/webapps
您缺少 r
我正在处理一个多阶段 docker 构建文件,试图向我们的基础 tomcat 映像添加一个额外的 war 文件。我在 windows 10 工作站上 运行 在本地 Docker 为 Windows 版本 2.3.0.4 使用 docker 引擎版本 19.03.12[=22] =]
我原来的docker文件看起来像这样
FROM tomcat:9.0.21-jdk8-openjdk
RUN rm -rf /usr/local/tomcat/webapps/*
COPY logging.properties /usr/local/tomcat/conf
COPY tomcat-users.xml /usr/local/tomcat/conf
COPY jt400-jdk8-9.7.jar /usr/local/tomcat/lib
COPY mysql-connector-java-8.0.12.jar /usr/local/tomcat/lib
COPY ojdbc6.jar /usr/local/tomcat/lib
COPY hazelcast-all-3.12.jar /usr/local/tomcat/lib
COPY hazelcast-tomcat85-sessionmanager-1.1.3.jar /usr/local/tomcat/lib
COPY hazelcast-client.xml /usr/local/tomcat/lib
COPY applicationinsights-agent-2.5.1.jar /usr/local/tomcat/lib
我想做的是从源代码构建 psi-probe 并将 war 文件添加到此基础映像。 这是我目前所拥有的
FROM maven:3.6.3-openjdk-8 as buildprobe
RUN git clone https://github.com/psi-probe/psi-probe && cd psi-probe
WORKDIR /psi-probe
RUN mvn package && ls -l /psi-probe && ls -l /psi-probe/psi-probe-web/target
FROM tomcat:9.0.21-jdk8-openjdk
RUN rm -rf /usr/local/tomcat/webapps/*
COPY --from=buildprobe /psi-probe/psi-probe-web/taget/probe.war /usr/local/tomcat/webapps
我可以 运行 docker build --target buildprobe -t buildprobe -f Dockerfile .
并且输出已构建。
NOTE: I added the ls commands after
mvn package
in an attempt to "debug" what going on
maven 包和两个 ls 命令的输出是 (t运行cated)
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for psi-probe 3.5.1-SNAPSHOT:
[INFO]
[INFO] psi-probe .......................................... SUCCESS [01:07 min]
[INFO] psi-probe-core ..................................... SUCCESS [01:53 min]
[INFO] psi-probe-rest ..................................... SUCCESS [ 5.945 s]
[INFO] psi-probe-tomcat7 .................................. SUCCESS [ 14.019 s]
[INFO] psi-probe-tomcat85 ................................. SUCCESS [ 13.403 s]
[INFO] psi-probe-tomcat9 .................................. SUCCESS [ 9.391 s]
[INFO] psi-probe-web ...................................... SUCCESS [ 39.060 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 04:30 min
[INFO] Finished at: 2020-08-12T14:39:19Z
[INFO] ------------------------------------------------------------------------
(ls -l /psi-probe)
...
-rw-r--r-- 1 root root 70248 Aug 12 14:29 pom.xml
drwxr-xr-x 1 root root 4096 Aug 12 14:36 psi-probe-core
drwxr-xr-x 1 root root 4096 Aug 12 14:38 psi-probe-rest
drwxr-xr-x 3 root root 4096 Aug 12 14:29 psi-probe-tomcat10
drwxr-xr-x 1 root root 4096 Aug 12 14:38 psi-probe-tomcat7
drwxr-xr-x 1 root root 4096 Aug 12 14:38 psi-probe-tomcat85
drwxr-xr-x 1 root root 4096 Aug 12 14:38 psi-probe-tomcat9
drwxr-xr-x 1 root root 4096 Aug 12 14:38 psi-probe-web
drwxr-xr-x 3 root root 4096 Aug 12 14:29 src
...
(ls -l /psi-probe/psi-probe-web/target)
drwxr-xr-x 2 root root 4096 Aug 12 14:38 classes
drwxr-xr-x 3 root root 4096 Aug 12 14:39 jspc
drwxr-xr-x 2 root root 4096 Aug 12 14:39 maven-archiver
drwxr-xr-x 7 root root 4096 Aug 12 14:39 probe
-rw-r--r-- 1 root root 27372423 Aug 12 14:39 probe.war
drwxr-xr-x 2 root root 4096 Aug 12 14:39 test-classes
-rw-r--r-- 1 root root 33350 Aug 12 14:39 webfrag.xml
然而,当构建进入阶段 1 (FROM tomcat:9.0.21-jdk8-openjdk
) 时,它在 COPY
命令上失败
COPY failed: stat /var/lib/docker/overlay2/81826a6b59d58818c342f1d5536489f4658be5e8557084ec572780aaf6ea19bc/merged/psi-probe/psi-probe-web/taget/probe.war: no such file or directory
我有一个类似的 docker 文件用于我正在开发的 angular 应用程序。该文件内容如下:
FROM node AS build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json /app/package.json
RUN npm install && npm install -g @angular/cli
COPY . /app
RUN ng build --output-path=dist
FROM nginx
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
在此文件中,前一阶段的 COPY
工作正常并且图像构建
我只是不确定尝试从源构建 psi-probe 然后将输出包含在我的 tomcat 图像中出了什么问题。
这将完成工作:
FROM maven:3.6.3-openjdk-8 as buildprobe
RUN git clone https://github.com/psi-probe/psi-probe && cd psi-probe
WORKDIR /psi-probe
RUN mvn package && ls -l /psi-probe && ls -l /psi-probe/psi-probe-web/target
FROM tomcat:9.0.21-jdk8-openjdk
RUN rm -rf /usr/local/tomcat/webapps/*
COPY --from=buildprobe /psi-probe/psi-probe-web/target/probe.war /usr/local/tomcat/webapps
您缺少 r