gpt4 book ai didi

docker - 一个 Docker 容器可以管理其他 Docker 容器吗?

转载 作者:行者123 更新时间:2023-12-01 01:41:48 25 4
gpt4 key购买 nike

我需要能够从另一个正在运行的 docker 容器部署一个新容器或管理在 CoreOS 中运行的 Docker 容器。
Docker 版本是 1.5.0CoreOS 版本是 647.2.0现在,我部署应用程序新实例的过程正在使用 shell 脚本。
它基本上做到了:

  • 将 Node.js 应用程序的源代码复制到一个新文件夹
  • cd进去
  • 在分离模式设置中部署一个新的 docker 容器 pwd-v到工作目录然后应用程序运行

  • 我在想,是否可以从容器内部执行 shell 脚本,以便它在 CoreOS 中部署一个新容器,或者是否有此方法的替代方法。
    另一个目标是能够停止正在运行的容器。
    任何意见或建议将不胜感激。

    最佳答案

    运行安装了 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 上进行了测试:
    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 套接字的权限,如果它是非 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 守护进程。

    关于docker - 一个 Docker 容器可以管理其他 Docker 容器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30535755/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com