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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值