所以我正在从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:无法打开共享对象文件:没有这样的文件或目录
答案 0 :(得分:2)
错误告诉您问题究竟是什么 - 您已复制可执行文件,但它依赖于容器中不存在的各种库(包括libkrb5.so.3
)。
你有两个选择;您可以将依赖项添加到容器中,也可以重新编译可执行文件以使其静态链接。
您可以在可执行文件上运行ldd
工具,以发现它需要哪些依赖项。然后,您可以像使用可执行文件一样将库直接复制到容器中,或者(可能更好)您可以找到依赖项来自哪个包,并使用apt-get
进行安装。
答案 1 :(得分:0)
从该错误看来,似乎缺少可执行文件(bedWiggle)所需的共享库(libkrb5.so.3)。
解决此问题的一种方法是:
其他是静态链接您的依赖项(取决于语言)。