看起来发生这种情况的原因很简单:UNIX权限不允许jenkins
用户读取/var/run/docker.sock
文件。最简单的解决方案是将/var/run/docker.sock
文件的组分配从root
更改为另一个组,然后将jenkins
添加到该组中:
[as root, inside the container]
root@host:/
root@host:/
这当然假设您已经安装了docker CLI,并且存在一个名为docker
的用户组。如果没有:
[as root, inside the container]
root@host:/
另外,您可以更改
/var/run/docker.sock
的全局权限,以允许非根用户访问该套接字,但我不建议这样做;这似乎只是一种糟糕的安全实践。类似地,您可以将套接字直接
chown
给用户
jenkins
,但我更愿意只更改组设置。
我对为什么使用
sudo
无法正常工作感到困惑。我刚才尝试了我认为与您描述的设置完全相同的操作,并且没有出现任何问题。
启动容器:
[on macos host]
darkstar:~$ docker run \
-v /var/run/docker.sock:/var/run/docker.sock \
docker.io/jenkins/jenkins:lts
darkstar:~$ docker exec -u root -it <container id> /bin/bash
安装Docker CLI:
[as root, inside container]
root@host:/
root@host:/
ca-certificates \
curl \
gnupg2 \
software-properties-common
root@host:/
root@host:/
root@host:/
root@host:/
"deb [arch=amd64] https://download.docker.com/linux/${rel_id} \
$(lsb_release -cs) stable"
root@host:/
root@host:/
接下来设置Jenkins用户:
[as root, inside container]
root@host:/
root@host:/
[...]
尝试使用:
[as jenkins, inside container]
jenkins@host:/$ sudo docker ps -a
[...]
password for jenkins:
CONTAINER ID IMAGE COMMAND CREATED ...
69340bc13bb2 jenkins/jenkins:lts "/sbin/tini -- /usr/…" 8 minutes ago ...
我看起来很正常。也许你采用了不同的方法安装Docker CLI? 不确定,但如果你想使用
sudo
访问docker套接字,这些步骤会起作用。尽管如此,我认为按照上面的说明更改组分配会更容易。祝你好运 :)
注意:所有测试均在运行Docker Engine v19.03.2的macOS Mojave v10.14.3上进行。这似乎并不严重依赖于主机平台,因此我希望它能在Linux或任何其他类UNIX操作系统上工作,包括其他版本的macOS/OSX。
/var
默认不共享 - OneCricketeer