从另一个控制容器

我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 psdocker 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/