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

所以我从docker文件build立一个图像,使用COPY命令将本地文件从主机复制到我的容器中。 图像生成后,我运行一个交互式shell,并testing我复制的文件,并有一个错误。

这是我的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 

这是我的docker文件

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

请注意,在我的Dockerfile所在的目录下,我放置了我的“软件”目录,该目录在Dockerfile的上下文中有一个bedWiggle可执行文件,所以它会加载到我的映像创build的新容器中。

这显示图像的成功完成

 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 

但是,当我input由上面的图像构build的容器并运行我的可执行文件时,出现错误

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

该错误告诉你到底是什么问题 – 你已经复制了可执行文件,但它依赖于不在容器中的各种库(包括libkrb5.so.3 )。

你有两个select, 您可以将依赖关系添加到容器中,或者可以重新编译可执行文件以使其静态链接。

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