linux可执行文件执行时提示No such file or directory(docker环境中运行的ubuntu镜像)

本文介绍了解决在64位Linux系统中运行32位程序时出现的错误提示问题,包括如何安装所需的32位库来确保程序正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux下在转换system.img文件类型时,提示

首先进入到了可执行文件所在目录下,并将system.img也放在同一目录下:

查看文件信息,可以看到文件是存在的,并且是可以执行的。

于是执行如下命令:

执行后提示:bash: ./simg2img: No such file or directory

觉得很纳闷,不知道为什么明明在却提示没有这样的文件,

于是在网上各种查,因为我是在docker中运行的,所以最初一直以为跑在docker的容器中才会有这个问题,其实跟docker半毛钱关系都没有,是因为可执行文件是32位的,而容器是64位的ubuntu,系统位数与该可执行文件需要的lib库位数不匹配。,所以提示可执行文件不存在:

用uname命令打印系统信息,发现系统是64位系统

r# uname -a
Linux ecb7b6d39077 3.13.0-32-generic #57~precise1-Ubuntu SMP Tue Jul 15 03:51:20 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

用file命令查看文件信息,发现是一个32位可执行文件。

file simg2img 
simg2img: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, BuildID[sha1]=d8a290a25c675ee17f378e4cdb1205790b78d63a, not stripped
dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped

要想在64位系统上与运行32位程序,则需要安装32位lib库。
对于Ubuntu用户可以使用下面的命令安装。

sudo apt-get install ia32-libs

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package ia32-libs is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
  lib32z1 lib32ncurses5 lib32bz2-1.0

过程中有可能找不到需要的库,但是会有几个替代包,选择安装其中一个。

sudo apt-get install lib32bz2-1.0

lib32bz2-1.0

然后可以运行,不再提示No such file or directory,但是报错:

./simg2img system.img s.img
./simg2img: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

那就安装提示不存在的库:

sudo apt-get install lib32stdc++6

然后就可以正常运行之前的可执行文件了。

遇到这种问题先把所需要的32位lib库安装好,当然也可能是其他问题,如编码可是问题等。


也提醒我一定要准备个完整的docker镜像,安装一些常用的工具,如vim。32bit libs等



### 解决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镜像之中。 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值