假设我使用以下命令启动docker容器
docker run -d --name my-container -p 1234 my-image
并且运行docker ps
显示该图像的端口绑定是......
80/tcp, 443 /tcp. 0.0.0.0:32768->1234/tcp
有没有办法可以使用docker inspect
来获取分配给1234
的端口(在本例中为32768)?
类似于使用以下命令解析和获取IP地址...
IP=$(docker inspect -f "{{ .Networksettings.IPAddress }} my-container)
我希望能够做类似以下的事情
ASSIGNED_PORT=$(docker inspect -f "{{...}} my-container)
我不确定是否有办法通过Docker做到这一点,但我想有一些命令行魔法(grep,sed等)可以让我做这样的事情。
当我运行docker inspect my-container
并查看NetworkSettings
时......我看到以下内容
"NetworkSettings": {
...
...
...
"Ports": {
"1234/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "32768"
}
],
"443/tcp": null,
"80/tcp": null
},
...
...
},
在这种情况下,我希望它找到HostPort而不告诉我有关端口1234的任何内容(它应该忽略它下面的443和80)并返回32768
。
答案 0 :(得分:3)
执行命令:docker inspect --format="{{json .Config.ExposedPorts }}" src_python_1
结果:{"8000/tcp":{}}
证明(使用docker ps
):
e5e917b59e15 src_python:latest "start-server" 22 hours ago Up 22 hours 0.0.0.0:8000->8000/tcp src_python_1
答案 1 :(得分:2)
根据您的口味,有两个不错的选择:docker port my-container 1234 | grep -o [0-9]*$
和docker inspect --format='{{(index (index .NetworkSettings.Ports "1234/tcp") 0).HostPort}}' my-container
答案 2 :(得分:0)
使用ip地址并不容易,因为一个容器可以有多个端口,有些是暴露的,有些则没有,但是这样就可以了:
sudo docker inspect name | grep HostPort | sort | uniq | grep -o [0-9]*
如果有多个端口被暴露,它将显示在一个新行上。
答案 3 :(得分:0)
我已使用docker inspect <container>
和docker inspect <container>| jq
组合来剥离端口。
在下面的示例中,我正在查看 dsb-server 容器和我正在寻找的端口 8080 / tcp
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
98b4bec33ba9 xxxxx:dsbv3 "./docker-entrypoint." 6 days ago Up 6 days 8009/tcp, 0.0.0.0:4848->4848/tcp, 8181/tcp, 0.0.0.0:9013->8080/tcp dsb-server
剥离端口
docker inspect dsb-server| jq -r '.[].NetworkSettings.Ports."8080/tcp"[].HostPort'
9013
docker inspect --format='{{(index (index .NetworkSettings.Ports "8080/tcp") 0).HostPort}}'
9013
答案 4 :(得分:0)
使用jq:
docker inspect --format="{{json .}}" my-container | jq '.NetworkSettings.Ports["1234/tcp"][0].HostPort'
使用您在docker run
中指定的端口更改1234。
答案 5 :(得分:0)
以上答案很接近,使我走上了正确的轨道,但我不断遇到以下错误:
模板解析错误:模板::1:操作数中意外的“ /”
我在这里找到了答案:realtime database examples
这终于对我有用:
data.ref.path