如何从检查docker集装箱中抓取暴露的港口?
假设我使用以下命令启动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)?
类似于使用以下命令parsing和获取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 }, ... ... },
在这种情况下,我希望它findHostPort而不告诉任何有关端口1234(它应该忽略443和80下面),并返回32768
。
执行命令: docker inspect --format="{{json .Config.ExposedPorts }}" src_python_1
结果: {"8000/tcp":{}}
certificate(使用docker ps
):
e5e917b59e15 src_python:latest "start-server" 22 hours ago Up 22 hours 0.0.0.0:8000->8000/tcp src_python_1
根据你的口味有两个很好的select: docker port my-container 1234 | grep -o [0-9]*$
docker port my-container 1234 | grep -o [0-9]*$
和docker inspect --format='{{(index (index .NetworkSettings.Ports "1234/tcp") 0).HostPort}}' my-container
这是不容易的,因为一个容器可以有多个端口,一些暴露,一些没有,但是这将得到它:
sudo docker inspect name | grep HostPort | sort | uniq | grep -o [0-9]*
如果有多个端口被暴露,它将显示在一个新的行上。
我已经用docker inspect <container>
和docker inspect <container>| jq
docker inspect <container>| jq
组合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