为什么 /var/run/docker.sock 在容器中无法访问

为什么 /var/run/docker.sock 在容器中无法访问

作为piRaspberry Pi OS 64 上的用户,我可以使用/var/run/docker.sock,但尽管已安装,但无法在容器中访问它。

在主机上我可以/var/run/docker.sock正常查询:

$ whoami
pi

$ ls -l /var/run/docker.sock 
srw-rw---- 1 root docker 0 Dec 22 09:06 /var/run/docker.sock

$ curl --unix-socket /var/run/docker.sock http://localhost/containers/json 
[]

我启动一个docker容器,它应该可以访问/var/run/docker.sock

$ docker run -it -v /var/run/docker.sock:/var/run/docker.sock ubuntu bash

但尽管在容器中是“root”,/var/run/docker.sock却无法访问:

root@17bc872c1f62:/# whoami
root

root@17bc872c1f62:/# ls -l /var/run/docker.sock
srw-rw---- 1 nobody nogroup 0 Dec 22 08:06 /var/run/docker.sock

root@17bc872c1f62:/# apt-get update && apt-get install curl -y
[...]

root@17bc872c1f62:/# curl -v --unix-socket /var/run/docker.sock http://localhost/containers/json
*   Trying /var/run/docker.sock:0...
* Immediate connect fail for /var/run/docker.sock: Permission denied
* Closing connection 0
curl: (7) Couldn't connect to server

docker 容器似乎以用户身份运行pi

$ docker run -it -v /home/pi:/home/pi ubuntu bash -c "touch /home/pi/xxx"
$ ls -l /home/pi/xxx
-rw-r--r-- 1 pi pi 0 Dec 23 14:48 /home/pi/xxx

该用户pi已被添加到docker组:

$ id
uid=1000(pi) gid=992(docker) groups=992(docker),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),102(input),105(render),106(netdev),993(gpio),994(i2c),995(spi),1000(pi)

答案1

这不是一个真正的答案,但对于那些最终来到这里的人来说,这可能是一些解决方法。

指定-H unix:///var/run/docker.sock,除了-v /var/run/docker.sock:/var/run/docker.sock这样做之外,还可以达到以下效果:

$ docker -H unix:///var/run/docker.sock run -it -v /var/run/docker.sock:/var/run/docker.sock ubuntu bash

对于我来说,这个文档-H很难读懂,也许有人可以用简单的术语解释它到底是做什么的。

初始 docker 安装已使用 Docker 网站提供的安装脚本完成。但现在我通过添加 apt 存储库并通过 重新安装了 Docker apt-get,它运行正常。现在看起来是这样的:

root@700852c6f51e:/# ls -l /var/run/docker.sock
srw-rw---- 1 root 992 0 Dec 24 22:29 /var/run/docker.sock

相关内容