docker 遇到 bash: No such file or directory 或 sh: not found等问题

为了可以方便使用宿主机工具包,docker volume了宿主机的工具包目录,在容器内使用挂载目录的工具包时出现

bash: xxx: No such file or directory 
sh: xxx: not found

本身文件不存在、权限和SELinux等低级问题后,探究问题发生的原因。

猜测一: 该文件目录在宿主机的inode和在Docker内的inode不一致

使用 stat /xxx/xxx 查看文件树inode信息
在这里插入图片描述
在这里插入图片描述
结论: 一致,排除

猜测二: 该程序在docker容器内缺少运行所依赖的库

当可执行程序缺少运行依赖库时,会返回 No such file or directory 或 not found等问题

https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/ldd.html
原理: ldd不是个可执行程式,而只是个shell脚本; ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。ld-linux.so模块会先于executable模块程式工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执行模块的dependency。

使用 ldd /xxx/xxx 查看程序运行依赖库
在这里插入图片描述
发现的确缺少相关依赖包
解决: 安装响应的依赖库

衍生问题

本次问题中遇到的可执行文件是jdk,docker内本身自带一款jdk,为什么宿主机的jdk无法运行,但docker内提前build的jdk可以运行呢?
在这里插入图片描述在这里插入图片描述
宿主机采用的是Oracle jdk,docker 预先安装的是open jdk,而且宿主机的architecture 是x86_64而docker采用的是amd64

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果在 Linux/MacOS 系统中运行 `docker-compose` 命令时出现 `/usr/local/bin/docker-compose: No such file or directory` 的错误,可能是因为 Docker Compose 没有被正确安装或者安装路径不在 `/usr/local/bin` 目录下。你可以按照以下步骤来解决这个问题: 1. 确认你已经安装了 Docker Compose。可以在命令行中输入以下命令:`docker-compose version`,如果输出了 Docker Compose 的版本信息,则说明已经安装成功; 2. 如果你没有安装 Docker Compose,可以参考 Docker 官方文档安装:https://docs.docker.com/compose/install/; 3. 如果已经安装了 Docker Compose,但是仍然出现了这个问题,可能是因为 Docker Compose 安装路径不在 `/usr/local/bin` 目录下。你可以按照以下步骤来查找 Docker Compose 的安装路径: - 在命令行中输入以下命令,查找 Docker Compose 的安装路径: ``` which docker-compose ``` - 如果输出了 Docker Compose 的安装路径,例如 `/usr/bin/docker-compose`,则说明 Docker Compose 安装路径不在 `/usr/local/bin` 目录下; - 如果没有输出 Docker Compose 的安装路径,则说明 Docker Compose 没有被正确安装,你需要重新安装 Docker Compose。 4. 将 Docker Compose 的安装路径添加到系统环境变量中。具体步骤如下: - 打开系统环境变量设置:在命令行中输入以下命令: ``` export PATH=$PATH:/path/to/docker-compose ``` 其中,`/path/to/docker-compose` 是 Docker Compose 的安装路径。 - 保存设置并关闭窗口,重新打开命令行窗口,再次输入命令:`docker-compose version`,如果输出了 Docker Compose 的版本信息,则说明已经解决了这个问题。 如果以上操作无法解决问题,你可以尝试重新安装 Docker Compose。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值