6

我在使用Python 中的docker-py从客户端访问 docker 守护程序时遇到问题。我通过命令启动了一个 docker 守护进程, sudo docker -d &输出为[1] 4894. 然后我尝试使用从这里以 root 身份 获得的代码从 python 访问守护进程

from docker import Client
cli = Client(base_url='unix://var/run/docker.sock')
cli.containers()

这给了我错误:

requests.exceptions.ConnectionError: ('Connection aborted.', error(111, 'Connection refused'))

我也试过

cli = Client(base_url='tcp://127.0.0.1:4894') 

但它给了我同样的错误。

4

2 回答 2

12

这似乎 /var/run/docker.sock 文件具有不正确的权限。由于 docker 守护进程是以 root 身份启动的,因此权限可能会受到限制。

如果您更改权限以允许其他用户访问它,您应该会获得更大的成功(例如 o=rwx)。

于 2015-04-17T15:41:55.357 回答
0

问题确实是/var/run/docker.sock权限不正确。要修复它,您需要授予当前用户对此文件的访问权限。

但是,在 Linux 上,授予o=rwx权限/var/run/docker.sock是非常危险的,因为它允许系统上的任何用户和服务以 root 身份运行命令。确实访问/var/run/docker.sock意味着对机器的完全根访问权限。请参阅https://docs.docker.com/engine/security/#docker-daemon-attack-surface

一种不太危险的方法是创建组docker并将当前用户添加到该组。请参阅https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user

但是,这种方法仍然存在潜在危险,因为它为当前用户提供了完全的 root 访问权限,而没有 sudo 提供的保护(即,不时询问用户密码并记录 sudo 调用。

另请参阅/var/run/docker.sock 的 Docker 安全风险是什么?

(不幸的是,我无法发表评论,因此我写下我的评论作为答案。)

于 2021-01-25T17:56:24.087 回答