一个Docker容器可以管理其他Docker容器吗? [英] Can a Docker container manage other Docker containers?

查看:15
本文介绍了一个Docker容器可以管理其他Docker容器吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Docker版本为1.5.0
CoreOS版本647.2.0

目前,我部署应用程序的新实例的过程正在使用外壳脚本。

基本上是这样的:

  1. 将Node.js应用程序的源代码复制到新文件夹
  2. CD刻录
  3. 在分离模式下将新的停靠容器设置为pwd部署到工作目录,然后应用程序运行

我在想,是否可以从容器内部执行外壳脚本,以便它在CoreOS中部署一个新的容器,或者是否有任何替代方法。

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

如有任何意见或建议,我们将不胜感激。

推荐答案

在装载Docker客户端和套接字的情况下运行控制容器,您将能够从容器内控制Docker守护进程(在Docker容器内运行docker客户端)

编辑:请注意,停靠器套接字需要超级用户访问权限,这意味着容器能够控制停靠程序守护进程并启动容器以获取主机上的超级用户权限,因此请对您信任且只有您需要访问的容器使用此选项。

$ 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上进行了测试:

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,这将不起作用,我们可以从主机挂载它或搜索程序包:

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组,但组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容器可以管理其他Docker容器吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆