首页 > 解决方案 > 无法使用 dockerfile 在容器中移动文件

问题描述

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

有什么建议么。?我尝试研究了许多问题,但找不到具体的解释和我们如何做到这一点的答案。?

谢谢,维谢什。

标签: dockerdockerfilecontainers

解决方案


在类 Unix 操作系统内部,命令被分解为“单词”。当您对 、 和 指令使用 JSON 数组语法时RUNENTRYPOINTCMD明确指定了单词是什么,并且它们不会被进一步拆分处理。

特别是当你跑步时

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

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

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

RUN cp -r node_modules/dir1/test/* /app

如果您不需要通配符,则需要手动拆分cp-r分成单独的单词

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

推荐阅读