我有一个非常简单的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。

最佳答案

在类似Unix的操作系统内部,命令被分解为“单词”。当您将JSON-array语法用于RUNENTRYPOINTCMD指令时,您将明确指定单词是什么,并且不会对其进行进一步处理。

特别是当你跑步时

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

它会在通常的位置查找名为cp -r的命令,该命令名称中包含空格和连字符。它不会找到没有空格和连字符的/bin/cp,也没有/bin/cp\ -r。如果可行,它还将传递其第一个参数,该参数在文件名中包含*,这也会失败。

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

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

关于docker - 无法使用dockerfile在容器中移动文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61909539/

10-15 22:29