如何解决Docker SDK:查找容器的 IP 地址?
我有两个 Docker 容器。 Container One 名为 5extraextranodes_plc1_1
,在名为 test_net
的桥接网络上使用 docker-compose 运行。
容器 2 在 docker-compose 之外构建和运行。在容器 2 中,有一个 Python3 脚本。在此 Python3 脚本中,我希望能够查找 5extraextranodes_plc1_1
容器的 IP 地址。
我最初尝试在 Python 代码中使用 subprocess.checkout()
来运行 docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 5extraextranodes_plc1_1
命令。但这给了我一个错误 FileNotFoundError: [Errno 2] No such file or directory: 'docker'.
所以现在我尝试在我的 Python 3.6 脚本中使用 Docker SDK 来做到这一点。我正在运行以下代码:
client = docker.from_env()
container = client.containers.list(filters={"name": "5extraextranodes_plc1_1"})
ip_add = container.attrs['NetworkSettings']['IPAddress']
不幸的是,这段代码给了我错误:docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.',FileNotFoundError(2,'No such file or directory')) 用于语句 client = docker.from_env()
。
如何从同一网络上的容器 2 中查找 5extraextranodes_plc1_1
容器的 IP 地址?
注意:我目前在网络 test_net
(与容器 1 相同的网络)上运行容器 2。我也试过在网络 host
模式下运行它。都失败了。
解决方法
如果您不想使用@larsks 所述的公共网络和 Docker DNS:
默认情况下,容器不允许更改主机系统上的内容,这是 docker 的核心概念。但是您可以明确允许访问 docker sock:
docker run -v /var/run/docker.sock:/var/run/docker.sock container2
但请记住:这个容器获得了超能力,必要时应该得到很好的保护。
如果您还有其他问题,请提供 container2 中的 Dockerfile
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。