加载Docker:共享库时出错:libsystemd journal.so.0:无法打开共享对象文件:没有这样的文件或目



我使用的是Docker版本:

Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:25:01 UTC 2015
 OS/Arch:      linux/amd64
Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:25:01 UTC 2015
 OS/Arch:      linux/amd64

我在Centos 7我在Docker环境中运行了一个Jenkins容器。当我访问Jenkins容器并尝试执行Docker命令时,我得到了以下错误:

libsystemd-journal.so.0: cannot open shared object file: No such file or directory

我尝试过:[root@localhostlib64]#sudo ln-s/usr/lib64/libsystemd.so.0 libsystemd.so.0ln:无法创建符号链接"libsystemd.so.0":文件存在

我在解决这个问题后看到了这个问题:问题

以下是相同的问题:https://botbot.me/freenode/docker/2015-12-01/?page=4

在对上一个问题进行了多次评论后,OP Jenson确认可以使用:

我将不得不制作一个dockerfile,因为run命令太多了
但目前有效:

docker run -d --name jenkins --volumes-from jenkins-dv --privileged=true 
-t -i 
-v /var/run/docker.sock:/var/run/docker.sock 
-v $(which docker):/bin/docker  
-v /lib64/libsystemd-journal.so.0:/usr/lib/libsystemd-journal.so.0 
-v /lib64/libsystemd-id128.so.0:/usr/lib/libsystemd-id128.so.0 
-v /lib64/libdevmapper.so.1.02:/usr/lib/libdevmapper.so.1.02 
-v /lib64/libgcrypt.so.11:/usr/lib/libgcrypt.so.11 
-v /lib64/libdw.so.1:/usr/lib/libdw.so.1 
-p 8080:8080 jenkins

我提到从容器("cic":"容器中的容器")运行docker意味着安装docker可执行文件和/var/run/docker.sock
显然,这个特定的映像需要更多的内容才能从容器中运行。

对于我的开发人员环境,我正在运行docker compose,并连接到ubuntu映像容器(14.04 LTS)(我还安装了/var/run/docker.sock)。

自从昨天晚上我的主机ubuntu系统更新以来,当我想在dev容器中运行docker命令时,我也遇到了同样的错误:

[dev@docker_dev]:~$ docker ps
docker: error while loading shared libraries: libsystemd-journal.so.0: cannot open shared object file: No such file or directory

所以我做了一个更新,安装了libsystemd-journal0:

[dev@docker_dev]:~$ sudo apt-get update
[dev@docker_dev]:~$ sudo apt-get install libsystemd-journal0

现在,我的开发容器可以很好地使用docker命令

从错误中,您的可执行文件所需的共享库似乎丢失了。解决此问题的一种方法是:

  1. 使用Dockerfile中的"COPY"命令复制容器中的共享库/依赖项。示例:COPY{local_path}{docker_path}
  2. 然后,在标准目录集之前,设置首先搜索共享库的环境变量。例如,对于基于Linux的操作系统,将使用LD_LIBRARY_PATH。环境变量可以通过Docker的环境替换(ENV)进行设置。示例:ENV LD_LIBRARY_PATH={docker_PATH}:$LD_LIBRRAY_PATH

另一种是将二进制文件和依赖项(依赖于语言)静态地链接起来。

最新更新