jenkins:图像:jenkins/jenkins:lts-jdk11 用户:'1000' 卷:-${PWD}/wolumes/jenkins:/var/jenkins_home -/var/run/docker.sock:/var/run/docker.sock环境:- VIRTUAL_HOST= ******* - LETSENCRYPT_HOST= ******* - VIRTUAL_PORT=8080
端口: - “8080:8080” - “50000:50000” 重启:除非停止
Jenkins 在具有以下参数的容器内运行(上面的代码)。我需要让 jenkins 访问主机上的 docker。
我在互联网的内部挖掘了一个解决方案
容器化带来的巨大价值是所有这些独立的容器(实际上是进程)可以共享一个内核。这意味着即使docker宿主机上运行着成百上千个容器,但内核控制的uid和gid仍然只有一组。所以同一个uid代表宿主机和容器中的同一个用户(即使名字是不同的用户显示在不同的地方)。
实际上,只有一个uid 1000 控制着系统的核心,在宿主机上,它被视为用户的昵称,而在容器中——作为用户-用户。
所以有一点我们需要明确:在容器内部,用户appuser可以在容器外部获取用户昵称的权限和权限。在主机上授予用户 nick 或 uid 1000 的权限也将授予容器上的 appuser。
换句话说,我们查看容器中的 uid(比如说 1000),在系统中创建一个 uid 为 1000 的用户,并赋予该用户对 docker.sock 的访问权限,并使用规定的 -v /var/run/docker.sock :/var/run/docker.sock 让我们可以通过容器访问主机系统上的 docker。