如何从容器调用主机的 docker 守护进程



这正是我所需要的。我已经有一个项目正在启动一组特定的 docker 映像,它完全可以正常工作。

但是我想创建另一个映像,特别是从头开始构建具有所有依赖项的项目。所以,问题是,在构建时,要创建 docker 镜像,我们需要从构建容器访问在主机上运行的 docker 守护进程。

有什么办法可以做到这一点吗?

如果您需要从容器内部访问主机上的 docker,您只需使用主机挂载(-v /host/path:/container/pathdocker run命令行上(公开容器内的 Docker 套接字即可。

例如,如果我启动一个新的fedora容器,公开主机上的 docker 套接字:

$ docker run -it -v /var/run/docker.sock:/var/run/docker.sock fedora bash

然后在容器内安装 docker

[root@d28650013548 /]# yum -y install docker
...many lines elided...

我现在可以在我的主机上与 docker 交谈:

[root@d28650013548 /]# docker info
Containers: 6
 Running: 1
 Paused: 0
 Stopped: 5
Images: 530
Server Version: 17.05.0-ce
...

您可以让容器通过 docker 套接字访问主机的 docker 守护程序,并"欺骗"它让 docker 可执行文件在容器内,而无需在其中安装 docker。就这样(以 Ubuntu-Xenial 容器为例(:

docker run --name dockerInsideContainer -ti -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker ubuntu:xenial

在此内部,您可以启动任何 docker 命令,例如 docker images 来检查它是否正常工作。

如果您看到如下错误:docker: error while loading shared libraries: libltdl.so.7: cannot open shared object file: No such file or directory您应该在容器内安装一个名为 libltdl7 的软件包。例如,您可以为容器创建一个 Dockerfile 或直接在运行时安装它:

FROM ubuntu:xenial
apt update
apt install -y libltdl7

docker run --name dockerInsideContainer -ti -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker ubuntu:xenial bash -c "apt update && apt install libltdl7 && bash"

希望对你有帮助

最新更新