为什么 Docker COPY 对单个文件和目录的处理方式不同?

Why Docker COPY works differently with single file and directory?

我有一个前端项目,其中包含 package.json。(假设 create-react-app 例如)

当我 运行 下面的命令时,一切正常,没有错误。

first DockerFile

COPY . develop
WORKDIR develop

但如果我想要 COPYpackage.json 下一个命令,我将面临错误。

second DockerFile

COPY package.json develop
WORKDIR develop

错误信息:Cannot mkdir: /develop is not a directory

我知道如何使用以下命令对我的项目进行 docker 化。

WORKDIR develop
COPY package.json .

我只是想知道为什么第一个 Dockerfile 有效而第二个无效。

我还在 COPY 命令后使用了 RUN ls,发现在这两种情况下都生成了 develop 目录。

这是因为 COPY package.json develop 被指示将 packages.json 复制到容器中作为 develop。所以下一个指令 WORKDIR 失败了,因为 develop 不是目录而是文件。

develop之前&&之后使用/,它应该可以工作。

FROM alpine
COPY temp.txt /develop/
WORKDIR develop