如何以安全的方式使用docker集装箱内的docker

我有一些Docker容器在Docker环境(CentOS虚拟机上)上运行,需要docker在里面。 所以我在容器中挂载/var/run/docker.sock

现在我正在创build/etc/default/docker

 DOCKER_OPTS="-H tcp://xx.xx.xx.xx:2376" 

但现在我的问题是:哪个IP是xx.xx.xx.xx ? 它是主机的IP还是容器的IP? +这是让Docker容器使用套接字的最佳方式吗? (=在docker中使用docker)

在Docker中运行docker并不是那么简单,你可能有这样的一个很好的理由。

最后一次我这样做的时候,我使用了dinddinddind中),并且必须挂载套接字( /var/run/docker.sock ),并将它与--privileged标志组合使用。 不过现在可能已经改变了(请参阅https://github.com/docker/docker/pull/15596 ),它应该能够在没有套接字装载的情况下运行它:

docker run --privileged -d docker:dind

所以一定要在https://hub.docker.com/_/docker/看看这个综合指南

在Docker中使用Docker可能会非常棘手。 我会推荐使用官方的Docker镜像和dind标签。 您不需要在选项中指定DOCKER_HOST ,因为它将被正确configuration。 例如运行:

docker run -ti --name docker -v /var/run/docker.sock:/var/run/docker.sock --privileged docker:dind sh

会把你放到容器里面的一个壳里。 那么如果你运行docker ps你应该看到主机上运行的容器列表。 注意在这种情况下需要--privileged标志,因为我们正在访问容器外部的Docker守护进程。

希望这可以帮助!

迪伦

编辑

由于Alexander在注释中突出显示的安全问题,请从上述命令中删除--privileged标志。 您也可以放弃dind标签,因为它不是必需的。