当对多个源文件使用 COPY 时,目标必须是一个目录并以 / 结尾

iai*_*ain 9 docker dockerfile

我决定使用COPY多源形式来保存中间命令,但是当我运行它时,会弹出以下错误:

Step 17/22 : COPY --chown=$APP_USER:$APP_USER Gemfile Gemfile.lock $APP_PATH
When using COPY with more than one source file, the destination must be a directory and end with a /
Run Code Online (Sandbox Code Playgroud)

在 Dockerfile 我有这个:

ARG APP_PATH='/usr/share/app/'

ONBUILD COPY --chown=$APP_USER:$APP_USER Gemfile Gemfile.lock $APP_PATH
Run Code Online (Sandbox Code Playgroud)

编辑

为了清楚起见,这发生在ONBUILD有和没有的情况下,碰巧我粘贴在ONBUILD示例中


我试过使用和不使用单引号。arg 有一个尾部斜杠并且是一个目录,那么为什么构建不尊重它?

我想使用这个 Dockerfile 将这个 Dockerfile 变成一个模板,ONBUILD所以如果我能确保APP_PATHarg 填充了一个可以工作的默认值,那就太好了。

任何帮助或见解将不胜感激。

Ren*_*ery 57

就我而言,在末尾添加(前)斜杠(在 docker 错误消息之后)就足够了,如下所示:

COPY package*.json .#(失败!)

COPY package*.json ./#(有效:)

  • 这应该是正确的答案。谢谢。 (2认同)

iai*_*ain 6

答案是,从 Docker 版本 18.09.0 开始,构建 4d60db4,不要这样做,因为它不起作用。

我最终对目标目录(以及 chown args)进行了硬编码:

ONBUILD COPY --chown=app:app Gemfile Gemfile.lock /usr/share/app/
Run Code Online (Sandbox Code Playgroud)

  • 像往常一样,如果您要投反对票,请说明原因。我不知道为什么指出即使当前形式的文档似乎暗示相反,它也无法完成是没有帮助的。 (4认同)