作为pi
Raspberry 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