如何使用Docker SDK for Python获取Docker容器的IP地址?

6
我正在使用 network_mode = bridge 启动一个容器,当我在终端检查网络容器时,我可以获得容器的IP地址。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_id

然而,我无法从容器对象中获取此IP地址。有没有不需要在网络对象中搜索容器的解决方案?

你有查看 Docker 网络文档 吗? - Kevin Müller
是的,但没有帮助,我需要使用Python的Docker SDK,因为与Docker守护程序的交互来自Flask服务器。 - Tiago Ramalho
查找此IP地址几乎从不必要(在几种常见情况下它根本不起作用); 你为什么想要它? - David Maze
这是一个学术项目,但基本上,我想在openvswitch中实现一个策略规则,根据IP地址限制对该容器的访问。 - Tiago Ramalho
3个回答

18

这里是一个例子:

import docker

client = docker.DockerClient()
container = client.containers.get(container_id_or_name)
ip_add = container.attrs['NetworkSettings']['IPAddress']
print(ip_add)

您可能需要先调用container.reload()来更新属性(reference)。


https://docker-py.readthedocs.io/en/stable/containers.html#container-objects - LinPy

3
如果IP地址没有像这里建议的那样从container.attrs['NetworkSettings']['IPAddress']返回,请尝试以下方法:
network_name = "my_net"
container.attrs["NetworkSettings"]["Networks"][network_name]["IPAddress"]

当使用docker-compose创建容器时,如果使用外部网络,对于我来说,就会出现这种情况。

1
container.attrs.get("NetworkSettings", {}).get("Networks", {}).get(network.name, {}).get("IPAddress")

1
请不要仅仅发布代码作为答案,还要提供解释您的代码是如何解决问题的。带有解释的答案通常更有帮助和更高质量,并且更有可能吸引赞同。 - Mark Rotteveel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接