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

a5g8bdjr  于 2022-11-22  发布在  Docker
关注(0)|答案(4)|浏览(599)

我决定使用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参数填充了一个默认值,这将是很好的。
任何帮助或见解将不胜感激。

fcipmucu

fcipmucu1#

在我的例子中就是在结尾加上一个斜杠
COPY package*.json .
COPY package*.json ./(工程)

4nkexdtk

4nkexdtk2#

答案是,在Docker版本18.09.0,build 4d60db4中,不要这样做,因为它不会工作。
最后我硬编码了目标目录(还有chown参数):

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

zzzyeukh3#

由于COPY位于ONBUILD中,因此ARG也需要位于ONBUILD
你可以认为Docker在下一个FROM之后复制(注入)你的ONBUILD命令,在那个阶段,如果你的ARG没有添加ONBUILD,它就不知道你的ARG。

suzh9iv8

suzh9iv84#

在我的示例中,我之前将buildKit设置为false,因此Settings → Docker Engine

"features": {
    "buildkit": true
  }

相关问题