Python docker-py 连接被拒绝
Python docker-py Connection Refused
我在 Python 中使用 docker-py 从客户端访问 docker 守护程序时遇到问题。我通过命令启动了一个 docker 守护进程
sudo docker -d &
,输出为 [1] 4894
。然后我尝试使用我从 here 作为 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')
但它给了我同样的错误。
这似乎是 /var/run/docker.sock 文件的权限不正确。由于 docker 守护程序以 root 身份启动,因此权限可能受到限制。
如果您更改权限以允许其他用户访问它,您应该会更成功(例如 o=rwx)。
问题确实是 /var/run/docker.sock
的权限不正确。
要修复它,您需要授予当前用户访问此文件的权限。
然而,在 Linux 上,授予 o=rwx
对 /var/run/docker.sock
的权限是非常危险的,因为它允许系统上的任何用户和服务以 root 身份执行 运行 命令。实际上访问 /var/run/docker.sock
意味着对机器的完全 root 访问。参见 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
但是,这种方法仍然存在潜在危险,因为它在没有 sudo 提供的保护的情况下为当前用户提供了完全的 root 访问权限(即不时询问用户密码并记录 sudo 调用。
另见
(很遗憾,我无法发表评论,因此我写下我的评论作为答案。)
我在 Python 中使用 docker-py 从客户端访问 docker 守护程序时遇到问题。我通过命令启动了一个 docker 守护进程
sudo docker -d &
,输出为 [1] 4894
。然后我尝试使用我从 here 作为 root
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')
但它给了我同样的错误。
这似乎是 /var/run/docker.sock 文件的权限不正确。由于 docker 守护程序以 root 身份启动,因此权限可能受到限制。
如果您更改权限以允许其他用户访问它,您应该会更成功(例如 o=rwx)。
问题确实是 /var/run/docker.sock
的权限不正确。
要修复它,您需要授予当前用户访问此文件的权限。
然而,在 Linux 上,授予 o=rwx
对 /var/run/docker.sock
的权限是非常危险的,因为它允许系统上的任何用户和服务以 root 身份执行 运行 命令。实际上访问 /var/run/docker.sock
意味着对机器的完全 root 访问。参见 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
但是,这种方法仍然存在潜在危险,因为它在没有 sudo 提供的保护的情况下为当前用户提供了完全的 root 访问权限(即不时询问用户密码并记录 sudo 调用。
另见
(很遗憾,我无法发表评论,因此我写下我的评论作为答案。)