问题: 假设您需要能够从容器内部在主机中创建容器,为什么?!想象一下,您在 Jenkins Pipeline 中自动执行了“连续的一切”过程,该过程包括创建用于测试的容器或服务。
即使容器和虚拟机强制与主机隔离,这也是一个有效的方案。
答案 0 :(得分:0)
解决方案: 抱歉,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的第一个组相同的组ID (困惑?!?!,请记住,我们位于我们要访问的容器中 为了托管Docker,我们执行了“ docker container exec -it -u root container bash” 为了访问该容器),那么名为“ youruser” 的用户将是 通过添加到“ docker” 组进行修改。
按照这些步骤操作后,您将可以使用通用过程运行docker命令,只需记住,可以做任何事情!!!甚至射击你的脚!!!