我们在Mac上有docker组吗?

Nee*_*hra 10 macos docker

我在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组.

任何帮助深表感谢.谢谢

Z4-*_*ier 6

看起来发生这种情况的原因非常简单:UNIX 权限不允许用户jenkins读取/var/run/docker.sock. 实际上,最简单的选择是将组分配/var/run/docker.sock从组更改root为另一个组,然后添加jenkins到该组:

\n\n
[as root, inside the container]\nroot@host:/# usermod -G docker jenkins\nroot@host:/# chgrp docker /var/run/docker.sock\n
Run Code Online (Sandbox Code Playgroud)\n\n

当然,这假设您已经安装了 docker CLI,并且有一个名为docker存在一个名为 的组。如果不:

\n\n
[as root, inside the container]\nroot@host:/# groupadd docker\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者,您可以更改世界权限/var/run/docker.sock以允许非 root 用户访问套接字,但我不建议这样做;这似乎是糟糕的安全做法。同样,您可以直接将chown套接字连接到jenkins用户,尽管我宁愿只更改组设置。

\n\n
\n\n

我很困惑为什么使用sudo对你不起作用。我刚刚尝试了我相信正是您所描述的设置,并且它运行没有问题。

\n\n

启动容器:

\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\n
Run 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\n
Run 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[...]\n
Run 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 ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

它似乎对我来说效果很好。也许您采用了不同的方式来安装 Docker CLI?不确定,但如果你想使用 访问 docker 套接字sudo,这些步骤将会起作用。尽管如此,我认为按照上面的解释更改小组分配会更容易。祝你好运 :)

\n\n
\n\n

笔记:所有测试均使用运行 Docker Engine v19.03.2 的 macOS Mojave v10.14.3 执行。这似乎并不严重依赖于主机平台,因此我希望它能够在 Linux 或任何其他类似 UNIX 的操作系统上运行,包括其他版本的 macOS/OSX。

\n


Lar*_*lke -1

不,但这有效:

  • 将用户(例如jenkins)添加到staff-group 中:sudo dseditgroup -o edit -a jenkins -t user staff
  • 允许组使用 sudo,sudo visudo添加: %staff ALL = (ALL) ALL

  • 这会破坏系统权限,工作人员不是管理员,也不应该是管理员。 (2认同)