当前位置: 首页 > news >正文

构建Dockerfile报错/bin/sh: 1: cd: can‘t cd to /xxx/yyy问题记录

目录

关键的命令行

排查分析

原因

附:Dockerfile构建时打印命令输出的办法


关键的命令行

WORKDIR /app
COPY record . 
RUN cd record && xxx

执行到RUN时报了错: /bin/sh: 1: cd: can't cd to /app/record
并且宿主机当前目录也准备好了record目录,此目录下有三个文件。

目的是拷贝record目录本身(包含了其子文件夹和子文件)到当前路径下,结果拷贝成了record下的所有文件直接放到了当前路径。

排查分析

为了验证当前目录下record到底有哪些东西,打印一下看看:

RUN ls -al ./record    

结果也报错:

ls: cannot access './record': No such file or directory

说明确实没有 record 这个目录。

然后把 RUN ls -al record  改成  RUN ls -al . 直接看当前目录,最终才发现端倪,在执行COPY record .这一行时,实际上是把record目录下的所有内容拷贝到了当前目录(而不是把record)
也就是说在执行COPY后当前目录下是record下三个文件,因此cd record或ls命令查看record当然不会成功了。

举个例子,在某个机器上某目录下有两个文件夹:

./aaa/hello
./bbb

上面出问题时的拷贝情形等价于

cp -r aaa/* bbb

而不是

cp -r aaa bbb  或  cp -r aaa/ bbb

原因及解决

在Dockerfile中COPY并不支持直接将源路径(目录)作为一个整体移动或复制到新路径,它仅能复制源路径下的内容。

如果要实现后者,则 可以直接将源路径换成.  即:

COPY .  目标路径

或使用cp 命令完成:

RUN cp -r record . 

因此为避免这种不存在的路径问题出现,就要保证拷贝到合适的位置、并且后续的命令处理也是正确的位置。

如果此类文件和路径问题总出现,建议多打印ls看看

附:Dockerfile构建时打印命令输出的办法

在执行构建时加如下参数:

--progress=plain --no-cache

http://www.lryc.cn/news/272769.html

相关文章:

  • Vue常用的修饰符详解(有哪些,怎么用)
  • Linux C/C++ 获取CPUID
  • 2023年“中银杯”安徽省网络安全B模块(部分解析)
  • 194.【2023年华为OD机试真题(C卷)】单行道汽车通行时间(迭代计算—JavaPythonC++JS实现)
  • 第二证券机构策略:股指预计维持蓄势震荡格局 关注煤炭、电力等板块
  • Go 泛型之泛型约束
  • 【数据仓库与联机分析处理】数据仓库
  • 机器学习:贝叶斯估计在新闻分类任务中的应用
  • [C#]基于deskew算法实现图像文本倾斜校正
  • Qt通过pos()获取坐标信息
  • 【Webpack】资源输入输出 - 配置资源出口
  • 【XR806开发板试用】XR806串口驱动CM32M对小厨宝的控制实验
  • 中介者模式-Mediator Pattern-1
  • ASP.NET Core基础之图片文件(一)-WebApi图片文件上传到文件夹
  • 精准掌控 Git 忽略规则:定制化 .gitignore 指南
  • Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果
  • k8s 之7大CNI 网络插件
  • stable diffusion 人物高级提示词(一)头部篇
  • 限制哪些IP能连接postgre
  • 可狱可囚的爬虫系列课程 08:新闻数据爬取实战
  • mysql2pgsql
  • 设计模式-流接口模式
  • Java 堆与栈的作用与区别
  • 再谈小米汽车
  • Power Apps 学习笔记 - IOrganizationService Interface
  • 常见函数的4种类型(js的问题)
  • DNS主从服务器、转发(缓存)服务器
  • 第二十一章 网络编程
  • scratch新跳7游戏 2023年12月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析
  • 三、C#面向对象编程(接口与实现)