从另一个容器,dockerpipe理容器

我需要能够部署一个新的容器或从另一个正在运行的Docker容器pipe理在CoreOS中运行的docker容器。

docker版本是1.5.0,coreos版本是647.2.0

现在我部署应用程序的一个新实例的过程是使用一个shell脚本。

它基本上做到:

  1. 将node.js应用程序的源代码复制到新文件夹
  2. CD进入它
  3. 以分离模式部署一个新的docker容器,将'pwd'设置为-v到工作目录,然后应用程序运行

我在想,如果有可能从容器内部执行shell脚本,以便在coreos中部署一个新的容器,或者有任何替代方法。

另一个目标是能够停止正在运行的容器。

任何意见或build议将不胜感激。

运行Docker客户端和套接字的控制容器,您将能够在容器内控制docker守护进程(在docker 容器中运行docker 客户端

编辑:注意docker套接字需要root访问权限,这意味着容器能够控制docker守护进程并启动一个包含器来获得主机上的root权限,所以将它用于你信任的容器,只有你需要访问。

 $ docker run \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker \ -v /usr/lib/libdevmapper.so.1.02:/usr/lib/libdevmapper.so.1.02 \ ubuntu docker --version Docker version 1.1.2, build d84a070 

也在最新的coreOS / Docker上testing过:

 core@coreos2 /usr/lib $ docker run -it --name=test --rm -h=dod -v /var/run/docker.sock:/var/run/docker.sock -v `which docker`:/usr/bin/docker -v /usr/lib/libdevmapper.so.1.02:/usr/lib/libdevmapper.so.1.02 ubuntu bash root@dod:/# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6746d8cd1c8d ubuntu:latest "bash" 3 seconds ago Up 2 seconds test root@dod:/# docker --version Docker version 1.6.2, build 7c8fca2-dirty root@dod:/# 

编辑:对于debian:jessie这不会没有libsqlite3-0的工作,我们可以挂载它的forms主机或search包:

 root@066bf3df3f2e:/# ldd `which docker` linux-vdso.so.1 (0x00007ffdb7dc8000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe8a77df000) libsqlite3.so.0 => not found libdevmapper.so.1.02 => /usr/lib/libdevmapper.so.1.02 (0x00007fe8a7593000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe8a71ea000) /lib64/ld-linux-x86-64.so.2 (0x00007fe8a79fc000) libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007fe8a6fdb000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fe8a6dd3000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe8a6bcf000) 

找出哪个软件包提供了这个文件的debian:jessie使用packages.debian.org/search

编辑:在容器中的用户将需要有权从主机读取docker套接字,如果它是一个非root用户,你可以尝试在容器中有一个docker组,但组gid应匹配主机docker组(未经证实,如果这实际上工作)。

或者,你可以apt-get install sudo

 echo "<user_name> ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/90-custom && \ chmod 0440 /etc/sudoers.d/90-custom 

在这一点上,你可以为该用户写脚本到sudo docker ..控制主机docker守护进程。