控制另一个容器

时间:2017-02-04 19:36:10

标签: jenkins docker continuous-integration continuous-deployment

我发现了很多关于docker容器(docker network,docker link)之间通信的文章。但我不知道从另一个容器控制容器是否存在良好的做法,例如运行和停止容器。 如果唯一的方法是在主机上使用其余的api,你有一篇很好的文章解释了吗?关于其余的api,我发现太多的文章解释了这些,其中大部分过时了。

为了明确我的意图,我有一个jenkins容器,它构建并将内置的内容移动到另一个文件夹中,用于执行构建代码的第二个容器。基本上,在移动之前我想要停止容器并在重启之后。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

  

我不知道控制容器是否合适   另一个,比如跑步和停止一个容器。

这是一个足够好的"练习,很多人这样做。 CoreOS的/usr/bin/toolbox基本上就是这个,其他一些像RancherOS这样做也是如此。

  

如果唯一的方法是在主机上使用其余的api你有一篇很好的文章解释了吗?

不,不是。您可以将docker的套接字安装到另一个docker容器中,然后直接从容器内部在主机上运行docker命令。这种做法被称为#dock; docker"," dind","嵌套容器"有一种变体,人们在现有容器中运行完整版本的docker(docker engine / daemon + client),但这不是你想要做的。

它的要点通常是相同的,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/