Docker Ubuntu 20.04执行CI任务交叉编译riscv64-linux-gcc时no such file or directory

  1. 第一次接触rsicv64的交叉编译环境(其他交叉编译环境也基本没接触过,只是知道概念和原理),目前的需求是需要在gitlab上给一套rsicv64-linux-gcc执行CI任务,默认直接在本地服务器执行交叉编译,需要经常清理服务器文件,且成熟的开发环境不适合作为测试环境来运行,因此考虑将CI任务直接在Docker中执行,也需要配置最小化且测试环境最干净的Docker镜像。
  2. 手工在服务器执行,全套流程都是成功的,没有任何问题,但是放到ubuntu 20.04的docker中执行就全失败了,各种依赖库根据报错都逐个安装并解决了,最后所有的任务开始,编译进行到一半退出了,一直提示riscv64-linux-gcc可执行文件no such file or directory

Debug流程:

  1. 首先在CI任务的after_script中逐个ls显示riscv64-linux-gcc的完整目录和文件,发现所有文件都存在,但是不能执行,在本地服务器中手工执行riscv64-linux-gcc -v是没问题的,基本说明这是docker中的编译环境问题导致,但是目前哪个环境导致的问题还非常不明确
  2. $ ls -alht /builds/xxx/xxx_buildroot/buildroot-2020.02.11/../toolchain/nds64le-linux-glibc-v5d/bin/riscv64-linux-gcc
    -rwxrwxrwx 1 1000 1000 98K Dec  3  2019 /builds/xxx/xxx_buildroot/buildroot-2020.02.11/../toolchain/nds64le-linux-glibc-v5d/bin/riscv64-linux-gcc
    $ /builds/xxx/xxx_buildroot/buildroot-2020.02.11/../toolchain/nds64le-linux-glibc-v5d/bin/riscv64-linux-gcc --help
    /bin/bash: line 128: /builds/xxx/xxx_buildroot/buildroot-2020.02.11/../toolchain/nds64le-linux-glibc-v5d/bin/riscv64-linux-gcc: No such file or director

     

  3. docker使用的是最新的ubuntu 20.04,服务器是ubuntu 18.04,尝试把docker版本回退至18.04,问题依旧
  4. 仔细查看riscv64-linux-gcc整个目录和上级所有文件权限,用户,用户组,发现docker默认是root用户登录了,而root的ui
### 解决Docker启动容器遇到的 'No such file or directory' 错误 当尝试启动Docker容器并收到 `no such file or directory` 的错误提示,通常意味着指定路径下的文件或目录不存在。这可能是由于多种原因引起的。 #### 可能的原因分析 1. **挂载卷配置不正确** 如果在创建容器指定了挂载点(volume mount),而主机上的源路径实际上不存在,则会触发此错误。确保所有挂载路径都有效且存在[^3]。 2. **ENTRYPOINT 或 CMD 配置问题** 容器启动脚本中的命令可能指向了一个不存在的文件或目录。需要注意的是,Docker执行器不会覆盖Docker镜像中的 ENTRYPOINT 设置[^2]。因此如果基础镜像定义了特定的入口点,在构建自定义镜像不慎修改可能会导致此类问题。 3. **工作目录设置不当** 若通过 `-w/--workdir` 参数设置了工作目录,但该位置在容器内并未被正确初始化,也会引发相同类型的报错。 #### 故障排查方法 为了诊断具体是哪个环节出了差错: - 使用 `docker inspect <container_name>` 查看容器详情,特别是 Mounts 和 Config部分的信息; - 尝试进入已停止状态的目标容器内部 (`docker run -it --entrypoint=/bin/bash <image>`) 手动探索环境变量、文件系统结构等; - 检查日志输出(`docker logs <container_name>`) 寻找更多线索。 #### 示例修正方案 假设是因为挂载路径不对所造成的错误,可以按照如下方式调整命令参数来解决问题: ```bash # 假设原始命令为: docker create \ --name ohos \ -v $(pwd):/home/zhangsan \ ubuntu:20.04 # 修改后的版本应确认宿主机上$(pwd)确实对应着预期的工作空间, # 并且/home/zhangsan也存在于目标Ubuntu镜像之中。 ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值