在Container中运行文件时出错“加载共享库时出错”DOCKER

时间:2015-03-27 03:26:00

标签: copy docker executable dockerfile

所以我正在从dockerfile构建一个映像,使用COPY命令将本地文件从主机复制到我的容器中。构建映像后,我运行一个交互式shell,并测试我复制的文件并出现错误。

这是我的shell信息。

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

这是我的泊坞文件

FROM ubuntu
MAINTAINER anthonycolombo60@gmail.com
COPY software /bin

请注意,在我的Dockerfile所在的目录下,我放置了我的"软件"目录,在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 anthonycolombo60@gmail.com
  ---> Using cache
  ---> 5el36a81f34
     Step 2 : COPY software /bin
 ---> Using cache
 ---> 1llhh2e278683ea
Successfully built 1hhfjjeea

但是当我输入上面图像构建的容器并运行我的可执行文件

时,我收到错误

root @hhhlf75hhhhfcb87ccfa:/ bin#./bedWigggle ./bedWiggle:加载共享库时出错:libkrb5.so.3:无法打开共享对象文件:没有这样的文件或目录

2 个答案:

答案 0 :(得分:2)

错误告诉您问题究竟是什么 - 您已复制可执行文件,但它依赖于容器中不存在的各种库(包括libkrb5.so.3)。

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

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

答案 1 :(得分: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

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