Docker 容器内的 sock 权限问题

Docker sock permission problem within a container

我确实有一个容器试图访问 docker API(使用 go docker 库)。 这样做时,出现以下错误:

"Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http:///var/run/docker.sock/v1.38/containers/json?filters={"name":{"test":true},"status":{"exited":true,"running":true}}&limit=0: dial unix /var/run/docker.sock: connect: permission denied"

好的,我正在尝试向容器用户添加访问该文件的权限,但没有成功。作为临时绕过,我只是将 666 添加到 /var/run/docker.sock 文件中。 但是还是没有成功。

我在调用 API 文件权限之前就打印了,它对每个人(所有者、组、其他)都是正确的 RW。但是,我仍然遇到同样的错误。

如果我尝试调用 docker API 我自己,或者在脚本中它确实有效。仅当从其他控制器内调用时我才会收到错误。

请注意,相同的代码在其他计算机上也能完美运行。

我在 Fedora 33 上 Docker 2013 年 3 月 19 日 go1.15.8

对看什么有什么建议吗?

谢谢,

您是否为您的容器打开了 link 主机 docker 守护进程?

这个问题可能有帮助:Access docker remote API from container

问题出在 Fedora 使用的 SELinux 保护上。 通常在挂载目录时,添加选项“z”将允许 Docker 自动重新标记目录。 但这对于域套接字是不允许的。 似乎最好的选择是 运行 docker 和以下选项

--security-opt label=type:container_runtime_t

更多可见here.