将COPY与多个源文件一起使用时,目标位置必须是目录,并以/

时间:2018-12-06 11:32:10

标签: docker dockerfile

我决定使用multiple source form of 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 /

在Dockerfile中,我有这个:

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

ONBUILD COPY --chown=$APP_USER:$APP_USER Gemfile Gemfile.lock $APP_PATH

编辑

请清楚地说明,这种情况是在ONBUILD存在和不存在的情况下发生的,恰好是我在ONBUILD示例中粘贴了


我尝试使用单引号和不使用单引号。 arg有一个斜杠,并且是目录,那么为什么构建不遵循它?

我想使用ONBUILD将此Dockerfile制作成模板,因此,如果可以确保将APP_PATH arg填充为默认值,那就很好了。

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

2 个答案:

答案 0 :(得分:1)

由于COPY位于ONBUILD中,因此ARG也必须位于ONBUILD

您可以认为Docker会在下一个FROM之后立即复制(注入)您的ONBUILD命令,在那个阶段,如果您的ARG没有添加ONBUILD,它不知道您的ARG。 / p>

答案 1 :(得分:0)

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

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

ONBUILD COPY --chown=app:app Gemfile Gemfile.lock /usr/share/app/