容器中运行文件出错,“加载共享库时出错” DOCKER

问题描述 投票:0回答:2

因此,我使用COPY命令从dockerfile构建映像,将本地文件从主机复制到我的容器中。生成映像后,我运行一个交互式外壳,并测试我复制的文件并出现错误。

这是我的外壳信息。

arcolombo@arcolombo:~/Documents/bedgraph_dockerfile$ sudo docker info
Containers: 18
Images: 72
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 108
Execution Driver: native-0.2
Kernel Version: 3.16.0-33-generic
Username: arcolombo
Registry: [https://index.docker.io/v1/]
WARNING: No swap limit support

这是我的docker文件

FROM ubuntu
MAINTAINER [email protected]
COPY software /bin

[请注意,在我的Dockerfile所在的目录下,放置了我的“ software”目录,该目录在Dockerfile的上下文中具有bedWiggle可执行文件,因此它确实会加载到我的映像所创建的新容器中。

这显示图像已成功完成

arcolombo@arcolombo:~/Documents/bed_dockerfile$ sudo docker build        -t="arcolombo" .
Sending build context to Docker daemon   2.7 MB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu
---> d0955f21bf24
Step 1 : MAINTAINER [email protected]
  ---> Using cache
  ---> 5el36a81f34
     Step 2 : COPY software /bin
 ---> Using cache
 ---> 1llhh2e278683ea
Successfully built 1hhfjjeea

但是,当我输入由以上图像构建的容器并运行我的可执行文件时,出现错误

root @ hhhlf75hhhhfcb87ccfa:/ bin#./bedWigggle./bedWiggle:加载共享库时出错:libkrb5.so.3:无法打开共享库文件:无此类文件或目录

copy docker executable dockerfile
2个回答
2
投票

该错误告诉您确切的问题是-您已复制了可执行文件,但它依赖于容器中没有的各种库(包括libkrb5.so.3)。

您有两种选择;您可以将依赖项添加到容器中,也可以重新编译可执行文件以使其静态链接。

您可以在可执行文件上运行ldd工具,以发现它需要哪些依赖项。然后,您可以像执行可执行文件一样将库直接复制到容器中,或者(可能更好),您可以找到依赖项来自哪个包并使用apt-get安装。


0
投票

从该错误看来,您的可执行文件(bedWiggle)所需的共享库丢失了(libkrb5.so.3)。

解决此问题的一种方法是:

  1. 在Dockerfile中使用“ COPY”命令来复制容器内的共享库/依赖项。示例:COPY {{local_path} {docker_path}
  2. 设置环境变量,在该目录中首先在标准目录集之前搜索共享库。例如,对于基于Linux的操作系统,使用LD_LIBRARY_PATH。可以通过Docker's Environment replacement (ENV)设置环境变量示例:ENV LD_LIBRARY_PATH = {{docker_path} :: $ LD_LIBRARY_PATH

其他是静态链接您的依赖项(取决于语言)。

© www.soinside.com 2019 - 2024. All rights reserved.