【问题标题】:Unable to move file in container using dockerfile无法使用 dockerfile 在容器中移动文件
【发布时间】:2020-05-20 09:25:22
【问题描述】:

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

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

谢谢, 维谢什。

【问题讨论】:

    标签: docker dockerfile containers


    【解决方案1】:

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

    尤其是当你跑步时

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

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

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

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

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

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

    【讨论】:

    • 感谢大卫的解释。这是有道理的,可以完成工作。
    【解决方案2】:

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

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

    来自文档的快照。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多