如何以安全的方式使用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并不是那么简单,你可能有这样的一个很好的理由。
最后一次我这样做的时候,我使用了dind
( dind
在dind
中),并且必须挂载套接字( /var/run/docker.sock
),并将它与--privileged
标志组合使用。 不过现在可能已经改变了(请参阅https://github.com/docker/docker/pull/15596 ),它应该能够在没有套接字装载的情况下运行它:
docker run --privileged -d docker:dind
在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
标签,因为它不是必需的。