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

如何从docker容器访问主机docker实例,docker,Docker,问题: 假设您需要能够从容器内部在主机中创建容器,为什么?!!!假设您在Jenkins管道中实现了“连续一切”流程的自动化,该流程包括创建用于测试的容器或服务 即使容器和虚拟机强制与主机隔离,这也是一种有效的方案。解决方案: 对不起,WinTel的伙计们,你们以为这个答案包括Windows吗?。。。只是一个线索,你可以启用tcp://localhost:2375 回到生产级答案,请执行以下步骤: 将实例绑定“/var/run/docker.sock”从主机加速到容器: docker contai

问题: 假设您需要能够从容器内部在主机中创建容器,为什么?!!!假设您在Jenkins管道中实现了“连续一切”流程的自动化,该流程包括创建用于测试的容器或服务


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

解决方案: 对不起,WinTel的伙计们,你们以为这个答案包括Windows吗?。。。只是一个线索,你可以启用tcp://localhost:2375

回到生产级答案,请执行以下步骤:

  • 将实例绑定“/var/run/docker.sock”从主机加速到容器:

    docker container run --name container -v /var/run/docker.sock:/var/run/docker.sock image
    
  • 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的组1相同的组id (困惑?!,记住我们在我们想要进入的容器内 为了托管docker,我们执行了“docker容器exec-it-u根容器bash” 为了访问容器),则名为“youruser”的用户将 通过添加到“docker”组进行修改

  • (快到了!!!)在容器中安装docker客户端,使用 最喜欢的包管理器和安装docker客户端,我有相同的版本 客户端和服务器,工作起来很有魅力,但我想我可以和 其他版本,但来吧!!混合版本???真的吗
  • 完成这些步骤后,您将能够使用通用流程运行docker命令,只需记住,它可以执行任何操作!!!甚至开枪打你的脚