如何从 docker 容器访问主机 docker 实例



>问题:假设您需要能够从容器内部在主机中创建容器,为什么?!!!想象一下,你在Jenkins 管道中自动化了"连续一切"过程,这个过程包括创建用于测试的容器或服务。

即使容器和虚拟机强制与主机隔离,这也是一个有效的方案。

解决方案:对不起,WinTel伙计们,你期望这个答案包括Windows吗?...好吧,只是一个线索,您可以启用 tcp://localhost:2375

回到生产级答案,请按照以下步骤操作:

  1. 将实例绑定"/var/run/docker.sock"从主机绑定到容器:

    docker container run --name container -v /var/run/docker.sock:/var/run/docker.sock image
    
  2. docker.sock 由于任何文件都会公开其用户 ID 和组 ID,任何具有组"docker"的用户都可以使用客户端与 docker "交谈",因此请运行以下脚本:

    #!/usr/bin/env bash
    DOCKER_SOCKET=/var/run/docker.sock
    DOCKER_GROUP=docker
    if [ -S ${DOCKER_SOCKET} ]; then
    DOCKER_GID=$(stat -c '%g' ${DOCKER_SOCKET})
    groupadd -for -g ${DOCKER_GID} ${DOCKER_GROUP}
    usermod -aG ${DOCKER_GROUP} youruser
    fi
    

不要惊慌失措,这不会损害您的系统,基本上,如果文件(套接字( docker.sock 存在(它应该(,脚本将获取它的组 ID,将创建一个组调用 docker 并将设置与主机中 docker 的第一组相同的组 ID (困惑?!?!,请记住,我们在想要访问的容器内 为了托管Docker,我们执行了"Docker容器exec -it -u root container bash">为了访问容器(,那么,名为"您的用户">的用户将是 通过添加到"码头工人">组进行修改。

  1. (差不多了!!(在您的容器中安装 docker 客户端,使用 最喜欢的包管理器并安装Docker客户端,我有相同的版本 客户端和服务器,就像一个魅力,但我想我可以使用 其他版本,但来吧!!混合版本???认真地???

完成这些步骤后,您将能够使用通用过程运行 docker 命令,请记住,可以做任何事情!!甚至可以在脚上开枪!!

最新更新