使用Docker SDK for Python启动容器后如何获取分配的宿主端口?
解决方案
你可以通过容器对象的attrs属性读取网络配置中的端口映射信息,注意要先调用reload()方法刷新容器元数据,避免刚启动时数据未同步导致拿不到端口。
完整示例代码如下:
import docker client = docker.from_env() container = client.containers.run( "bfirsh/reticulate-splines", ports={6379 : None}, # SDK自动选择宿主端口 detach=True ) # 刷新容器最新状态 container.reload() # 读取6379/tcp端口对应的宿主端口 mapped_port = container.attrs["NetworkSettings"]["Ports"]["6379/tcp"][0]["HostPort"] print(f"实际分配的宿主端口为:{mapped_port}")
注意事项
- 端口映射的key需要携带协议后缀,默认tcp协议对应
[端口号]/tcp,如果是udp协议则对应[端口号]/udp - 每个容器端口可能对应多个宿主端口绑定,因此返回值为列表,常规场景下取第一个元素的
HostPort字段即可 - 如果你不清楚容器暴露的端口列表,可以直接打印
container.attrs["NetworkSettings"]["Ports"]查看完整的端口映射结构
内容的提问来源于stack exchange,提问作者Lorah Attkins
相关产品推荐
相关产品推荐

