docker error while loading shared libraries

21 篇文章 0 订阅

环境: centos7.6 、docker 19.03

在使用 docker build 后,执行 docker run ,容器起不来,报错 error while loading shared libraries: libprotobuf.so.9,镜像中已经有 libprotobuf.so.9,怀疑是环境变量问题导致。

解决方法直接跳到第 8 步

1、docker build

# docker build -t data:18 .

Dockerfile 大致如下,192.168.7.17/energy/centos7-base:v9 是一个私有镜像,在 centos7 镜像基础上增加了很多库,run.sh 执行这个脚本 /usr/bin/DataCenter

FROM 192.168.7.17/energy/centos7-base:v9
...
EXPOSE 9017
ENTRYPOINT ["./run.sh"]

2、docker run

# docker run --name xx -it data:18

3、docker 容器起不来,查看日志

# docker logs -f xxx
/usr/bin/DataCenter: error while loading shared libraries: libprotobuf.so.9: cannot open shared object file: No such file or directory

4、覆盖 entrypoint,启动容器

# docker rm xx
# docker run --name xx --entrypoint /bin/bash -dit data:18

5、在容器里面执行 ./run.sh 成功

# docker exec -it xx bash
[root@dc48f39cf483 DataCenter9017]# ./run.sh

6、在容器外面通过 docker exec 执行 ./run.sh 失败

# docker exec xx ./run.sh
/usr/bin/DataCenter: error while loading shared libraries: libprotobuf.so.9: cannot open shared object file: No such file or directory

7、对比容器里面的环境变量和 docker exec 时的环境变量

容器外面 LD_LIBRARY_PATH 为空,测试后发现 docker exec $env 其实为宿主机的 $env

# docker exec xx echo $LD_LIBRARY_PATH

容器里面 LD_LIBRARY_PATH 值为 :/usr/local/lib

# docker exec -it xx bash
[root@dc48f39cf483 DataCenter9017]# echo $LD_LIBRARY_PATH
:/usr/local/lib

在容器里面添加 a.sh

[root@dc48f39cf483 DataCenter9017]# cat a.sh
echo $LD_LIBRARY_PATH
[root@dc48f39cf483 DataCenter9017]# sh a.sh
:/usr/local/lib

在容器外面中 a.sh,返回为空,说明在执行 docker run 或者 docker exec 命令容器并没有 LD_LIBRARY_PATH 这个环境变量

[root@ansible002 supervisor]# docker exec xx sh a.sh

8、在 Dockerfile 中添加 ENV 或者 docker run\exec 时添加 -e

# cat Dockerfile
FROM 192.168.7.17/energy/centos7-base:v9
...
ENV LD_LIBRARY_PATH=:/usr/local/lib
EXPOSE 9017
ENTRYPOINT ["./run.sh"]
# docker exec -e LD_LIBRARY_PATH=:/usr/local/lib xx ./run.sh

总结:docker run/exec 时的环境变量和进入到容器里面的环境变量有些区别

这个错误是由于缺少共享库文件引起的。在这种情况下,可能是由于系统中缺少所需的库文件或者库文件路径配置不正确导致的。根据引用\[1\]和引用\[2\]的信息,可以看出是缺少libltdl.so.7这个库文件。类似的错误也可以在引用\[3\]中找到。 要解决这个问题,可以尝试以下几个步骤: 1. 确认系统中是否存在所需的库文件。可以使用命令`find / -name libltdl.so.7`来查找该文件是否存在。如果不存在,可能需要安装相应的软件包来获取该库文件。 2. 如果库文件存在,但是路径配置不正确,可以尝试将库文件路径添加到LD_LIBRARY_PATH环境变量中。可以使用命令`export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH`来添加路径。 3. 如果以上步骤都没有解决问题,可能需要重新安装相关软件包或者更新系统以获取所需的库文件。 总结起来,要解决"docker:error while loading shared libraries:libltdl.so.7:cannot open shared object file"这个错误,需要确认库文件是否存在,路径是否配置正确,并可能需要重新安装相关软件包或者更新系统。 #### 引用[.reference_title] - *1* [docker in docker 出现 libltdl.so.7 问题](https://blog.csdn.net/weixin_30675967/article/details/98614983)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [使用Docker安装Jenkins并添加插件](https://blog.csdn.net/qq_39211866/article/details/80878369)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [动态库的动态链接(error while loading shared libraries,cannot open shared object file)](https://blog.csdn.net/sole_cc/article/details/47188123)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值