Dockerfile COPY 由 运行 sh 脚本生成的文件

Dockerfile COPY file generated by RUN sh script

我想使用 Docker.

自动构建和执行 java spring Web 服务

我 运行 来自 dockerfile 的脚本生成 settings.xml 文件。我想在图像中复制该文件,但是因为 运行 创建一个新容器(我想?)构建找不到生成的文件。

这是我的 Docker 文件的开头:

FROM ubuntu:20.04

WORKDIR /app

COPY . .

RUN ./script.sh

COPY settings.xml /root/.m2/

并且有输出...

如何复制由我的 sh 脚本生成的 settings.xml 文件?

谢谢!

COPY 从主机复制到镜像。如果你想从镜像复制到镜像,你使用'normal'cp命令。

您说得对,每个 运行 语句都在单独的 shell 中运行。但是由于您生成的文件存储在文件系统中,因此如果您在不同的 运行 语句中执行它,它将起作用。

但让我们在一个 运行 语句中完成,只在图像中获得 1 个新图层:

FROM ubuntu:20.04

WORKDIR /app

COPY . .

RUN ./script.sh && \
    cp settings.xml /root/.m2/

如果您不需要副本留在 /app,您也可以使用 mv 移动文件。

通过执行RUN script.sh,文件将在容器内生成。因此无法使用 COPY Dockerfile 命令将其复制到镜像中。相反,您可以 mv 将容器内的文件发送到所需的目的地:

FROM ubuntu:20.04

WORKDIR /app

COPY . .

RUN ./script.sh \
  && mv /path/to/settings.xml /root/.m2/