从另一个控制容器
我find了很多关于docker集装箱(dockernetworking,docker链接)之间的沟通的文章。 但是我不知道是否存在一个从另一个控制容器的好习惯,比如运行和停止一个容器。 如果唯一的办法是在主机上使用其余的api,你有没有一个好的文章解释这个? 关于其余的API我发现太多的文章解释说,其中大部分是过时的。
为了精确我的意图,我有一个jenkins容器,build立和移动内置到另一个文件夹的第二个容器执行构build的代码。 基本上,移动之前,我想停止容器,重新启动后。
感谢帮助。
我不知道是否有一个好的做法来控制另一个容器,如运行和停止一个容器。
这是一个“足够好”的做法,有很多人这样做。 CoreOS的/usr/bin/toolbox
基本上就是这样,其他几个像RancherOS也是这样做的。
如果唯一的方法是使用主机上的其余API,你有一个很好的文章,解释这一点?
不它不是。 您可以将docker的套接字安装到另一个docker容器中,然后直接在容器中运行docker命令。 这种做法被称为“docker”,“dind”,“嵌套容器”等。有一个变种,人们在现有的容器中运行docker(docker引擎/守护进程+客户端)的完整版本,但这是不是你想在这里做什么。
它的要点通常是一样的,docker unix socket – /var/run/docker.sock
被暴露/安装在“控制容器”中,即你想用来控制docker守护进程的容器。 然后安装docker命令行客户端并像平常一样使用docker命令; docker ps
, docker start/stop/run
应该都按预期工作。
设置它并不是微不足道的[1],并且有相关的安全问题[2] [3],但是有很多人在做这件事。
这里是你的参考:
[1] https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/ ,请参阅Solution
下的部分,在此之前的一切是你不应该正在做。
[2] https://www.lvh.io/posts/dont-expose-the-docker-socket-not-even-to-a-container.html
[3] https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/