當我使用docker SDK for Python啟動容器時,我可以指定主機埠,None以便 SDK 為我選擇一個隨機可用埠:
import docker
client = docker.from_env()
container = client.containers.run(
"bfirsh/reticulate-splines",
ports={6379 : None} # SDK chooses a host port
detach=True)
問題是我想在運行命令之后知道 SDK 選擇了哪個主機埠。我怎么做?
uj5u.com熱心網友回復:
您需要重新加載容器然后使用 container.ports
import docker
client = docker.from_env()
container = client.containers.run(
"bfirsh/reticulate-splines", ports={6379: None}, detach=True
)
container.reload() # need to reload
print(container.ports)
輸出
{'6379/tcp': [{'HostIp': '0.0.0.0', 'HostPort': '53828'}]}
這僅適用于大于 4.0.2 的版本(現在至少有 4 年歷史了)
添加此屬性的提交
uj5u.com熱心網友回復:
不幸的是,Container物件沒有ports屬性(@python_user 注釋在 3.7.2 之前)。通過列印attrs字典,我能夠發現主機埠包含在NetworkSettings屬性中。在我的情況下,檢索主機埠如下所示:
attrs['NetworkSettings']['Ports']['6379/tcp'][0]['HostPort']
# container port specified at launch ^^^
更通用的解決方案是避免使用容器埠 (6379) 并'HostPort'改為搜索密鑰。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/338574.html
上一篇:Nginx沒有針對api的好埠
