无法使用dockerfile移动容器中的文件

无法使用dockerfile移动容器中的文件,docker,dockerfile,containers,Docker,Dockerfile,Containers,我编写了一个非常简单的dockerfile,但不幸的是,在dockerfile中执行以下命令时失败:- RUN ["cp -r", "node_modules/dir1/test/*", "/app"] 下面是我收到的错误消息:- OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"cp -r\": executable file not found in $

我编写了一个非常简单的dockerfile,但不幸的是,在dockerfile中执行以下命令时失败:-

RUN ["cp -r", "node_modules/dir1/test/*", "/app"]
下面是我收到的错误消息:-

OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"cp -r\": executable file not found in $PATH": unknown
我也尝试过用“mv”命令代替“cp”,但没有成功

我不想移动整个文件夹,但要移动文件夹的所有内容。如前所述,如果我执行以下命令,它会工作,但会移动目录:-

RUN ["cp -r", "node_modules/dir1/test", "/app"]
有什么建议吗。?我试过研究许多问题,但找不到具体的解释,也找不到如何解决的答案

谢谢,
Vishesh。

首先,您需要检查
cp
命令是否可用。一旦可用,您需要添加
/。
,以便仅复制内容

RUN ["cp -r", "node_modules/dir1/test/.", "/app/"]
文档中的快照。

首先,您需要检查
cp
命令是否可用。一旦可用,您需要添加
/。
,以便仅复制内容

RUN ["cp -r", "node_modules/dir1/test/.", "/app/"]
文档中的快照。

在类似Unix的操作系统内部,命令被分解为“单词”。当您对
RUN
ENTRYPOINT
CMD
指令使用JSON数组语法时,您明确地指定了这些单词是什么,它们不会被进一步分解处理

尤其是当你跑步的时候

RUN ["cp -r", "node_modules/dir1/test/*", "/app"]
它在通常的位置查找名为
cp-r
的命令,其中命令名包括空格和连字符。它找不到没有空格和连字符且没有
/bin/cp \-r
/bin/cp
。如果这样做有效,它还将传递其第一个参数,该参数在文件名中包含一个
*
,该参数也将失败

这里最简单的解决方案是不使用JSON数组形式。这将隐式运行一个shell(命令包装在
/bin/sh-c
中),它将为您拆分单词并展开globs

RUN cp -r node_modules/dir1/test/* /app
如果不需要通配符,则需要手动将
cp
-r
拆分为单独的单词

RUN ["cp", "-r", "node_modules/dir1/test", "/app"]

在类似Unix的操作系统内部,命令被分解为“单词”。当您对
RUN
ENTRYPOINT
CMD
指令使用JSON数组语法时,您明确地指定了这些单词是什么,它们不会被进一步分解处理

尤其是当你跑步的时候

RUN ["cp -r", "node_modules/dir1/test/*", "/app"]
它在通常的位置查找名为
cp-r
的命令,其中命令名包括空格和连字符。它找不到没有空格和连字符且没有
/bin/cp \-r
/bin/cp
。如果这样做有效,它还将传递其第一个参数,该参数在文件名中包含一个
*
,该参数也将失败

这里最简单的解决方案是不使用JSON数组形式。这将隐式运行一个shell(命令包装在
/bin/sh-c
中),它将为您拆分单词并展开globs

RUN cp -r node_modules/dir1/test/* /app
如果不需要通配符,则需要手动将
cp
-r
拆分为单独的单词

RUN ["cp", "-r", "node_modules/dir1/test", "/app"]

谢谢你的解释,大卫。这很有道理,并且完成了任务。谢谢你的解释,大卫。这是有道理的,可以完成工作。