我在Mac上安装了docker,一切运行正常.我正在使用Jenkins docker镜像并运行它.使用Jenkins作为CI服务器并通过运行docker命令构建更多图像时,我发现我们必须在运行Jenkins映像时绑定mount /var/run/docker.sock,以便它可以访问docker守护程序.
我这样做并在Jenkins的容器中安装了docker CLI,但是当运行"docker ps"或任何其他docker命令时,它会抛出以下错误:
在尝试连接到unix上的Docker守护程序套接字时获得权限被拒绝:///var/run/docker.sock:获取http://%2Fvar%2Frun%2Fdocker.sock/v1.28/containers/json:拨打unix /var/run/docker.sock:connect:权限被拒绝
当我以root用户身份连接到容器时,它可以正常工作.但切换到'jenkins'用户会抛出上述错误.我已经将'jenkins'用户添加到sudo列表但没有帮助.
我发现很少有文章建议将"jenkins"用户添加到"docker"组,但令我惊讶的是我在Mac或内部容器中找不到任何docker组.
任何帮助深表感谢.谢谢
看起来发生这种情况的原因非常简单:UNIX 权限不允许用户jenkins读取/var/run/docker.sock. 实际上,最简单的选择是将组分配/var/run/docker.sock从组更改root为另一个组,然后添加jenkins到该组:
[as root, inside the container]\nroot@host:/# usermod -G docker jenkins\nroot@host:/# chgrp docker /var/run/docker.sock\nRun Code Online (Sandbox Code Playgroud)\n\n当然,这假设您已经安装了 docker CLI,并且有一个名为docker存在一个名为 的组。如果不:
[as root, inside the container]\nroot@host:/# groupadd docker\nRun Code Online (Sandbox Code Playgroud)\n\n或者,您可以更改世界权限/var/run/docker.sock以允许非 root 用户访问套接字,但我不建议这样做;这似乎是糟糕的安全做法。同样,您可以直接将chown套接字连接到jenkins用户,尽管我宁愿只更改组设置。
我很困惑为什么使用sudo对你不起作用。我刚刚尝试了我相信正是您所描述的设置,并且它运行没有问题。
启动容器:
\n\n[on macos host]\ndarkstar:~$ docker run \\\n -v /var/run/docker.sock:/var/run/docker.sock \\ \n docker.io/jenkins/jenkins:lts\ndarkstar:~$ docker exec -u root -it <container id> /bin/bash\nRun Code Online (Sandbox Code Playgroud)\n\n安装 Docker CLI:
\n\n[as root, inside container]\nroot@host:/# apt-get update\nroot@host:/# apt-get -y install apt-transport-https \\\n ca-certificates \\\n curl \\\n gnupg2 \\\n software-properties-common\nroot@host:/# rel_id=$(. /etc/os-release; echo "$ID")\nroot@host:/# curl -fsSL https://download.docker.com/linux/${rel_id}/gpg > /tmp/dkey\nroot@host:/# apt-key add /tmp/dkey\nroot@host:/# add-apt-repository \\\n "deb [arch=amd64] https://download.docker.com/linux/${rel_id} \\\n $(lsb_release -cs) stable"\nroot@host:/# apt-get update\nroot@host:/# apt-get -y install docker-ce\nRun Code Online (Sandbox Code Playgroud)\n\n然后设置jenkins用户:
\n\n[as root, inside container]\nroot@host:/# usermod -G sudo jenkins\nroot@host:/# passwd jenkins\n[...]\nRun Code Online (Sandbox Code Playgroud)\n\n并尝试一下:
\n\n[as jenkins, inside container]\njenkins@host:/$ sudo docker ps -a\n[...]\npassword for jenkins:\n\nCONTAINER ID IMAGE COMMAND CREATED ...\n69340bc13bb2 jenkins/jenkins:lts "/sbin/tini -- /usr/\xe2\x80\xa6" 8 minutes ago ...\nRun Code Online (Sandbox Code Playgroud)\n\n它似乎对我来说效果很好。也许您采用了不同的方式来安装 Docker CLI?不确定,但如果你想使用 访问 docker 套接字sudo,这些步骤将会起作用。尽管如此,我认为按照上面的解释更改小组分配会更容易。祝你好运 :)
笔记:所有测试均使用运行 Docker Engine v19.03.2 的 macOS Mojave v10.14.3 执行。这似乎并不严重依赖于主机平台,因此我希望它能够在 Linux 或任何其他类似 UNIX 的操作系统上运行,包括其他版本的 macOS/OSX。
\nLar*_*lke -1
不,但这有效:
jenkins)添加到staff-group 中:sudo dseditgroup -o edit -a jenkins -t user staffsudo visudo添加:
%staff ALL = (ALL) ALL
| 归档时间: |
|
| 查看次数: |
5226 次 |
| 最近记录: |