docker - 无法使用 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"]
有什么建议么。?我尝试研究了许多问题,但找不到具体的解释和我们如何做到这一点的答案。?
谢谢,维谢什。
解决方案
在类 Unix 操作系统内部,命令被分解为“单词”。当您对 、 和 指令使用 JSON 数组语法时RUN
,ENTRYPOINT
您CMD
明确指定了单词是什么,并且它们不会被进一步拆分处理。
特别是当你跑步时
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"]
推荐阅读
- python - 多次设置同一个变量不起作用 [已解决]
- cuda - cuda 11 内核无法运行
- python - 如何将列添加到 numpy recarry
- google-cloud-platform - 我们如何使用数据资源获取 GCP 存储桶名称
- sql - .NET CORE:Dapper 映射多对多查询
- java - Gson.fromJSON 返回 0 和 null
- git - 如何在 git update 上触发 ansible playbook?
- apache-spark - 需要将列的值映射到另一列作为火花数据框中的键值对
- graph - Spotfire - 在一个图上选择数据并从前一个选择中取消选择
- spring-boot - 如何从几个 yaml 规范生成 swagger-ui?