Py学习  »  docker

Docker py如何使用from_env()从容器访问Docker主机

user18140022 • 2 年前 • 521 次点击  

我在一个容器内,我想从Docker机器/主机上抓取一个容器。我通常会在本地机器上执行此操作,但通过docker容器它会给我一个错误:

client = docker.from_env()
client.containers.get('myPostgres')

吐出:

AttributeError: 'function' object has no attribute 'get'
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129394
 
521 次点击  
文章 [ 1 ]  |  最新文章 2 年前
larsks
Reply   •   1 楼
larsks    2 年前

默认情况下,容器将无法访问主机Docker服务(这是一项安全功能:访问Docker与 root 访问权限,因此您只希望在特定情况下公开此访问权限)。

如果要从容器中访问主机的Docker服务,需要将Docker套接字映射到容器中。一般来说,这意味着运行以下操作:

docker run -v /var/run/docker.sock:/var/run/docker.sock ...

比较:

$ docker run --rm -it docker.io/python:3.10 bash
$ pip install docker
[...]
$ python
root@2dfed359374e:/# python
Python 3.10.3 (main, Mar 18 2022, 16:01:59) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import docker
>>> c = docker.from_env()
Traceback (most recent call last):
[...]
FileNotFoundError: [Errno 2] No such file or directory

有了这个:

$ docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock docker.io/python:3.10 bash
root@ebe430bc9463:/# pip install docker
[...]
root@ebe430bc9463:/# python
Python 3.10.3 (main, Mar 18 2022, 16:01:59) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import docker
>>> c = docker.from_env()
>>> c.containers.list()
[<Container: ebe430bc94>, <Container: 91f24628fd>]