我有一个非常简单的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语法用于RUN
,ENTRYPOINT
和CMD
指令时,您将明确指定单词是什么,并且不会对其进行进一步处理。
特别是当你跑步时
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/