如何从检查 docker 容器中获取暴露的端口?

The*_*boy 8 grep sed docker dockerfile

假设我使用以下命令启动一个 docker 容器

docker run -d --name my-container -p 1234 my-image
Run Code Online (Sandbox Code Playgroud)

运行docker ps显示该图像的端口绑定是...

80/tcp, 443 /tcp. 0.0.0.0:32768->1234/tcp
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以用来docker inspect获取分配要映射到的端口1234(在本例中为 32768)?

类似于使用以下命令解析并获取IP地址......

IP=$(docker inspect -f "{{ .Networksettings.IPAddress }} my-container)
Run Code Online (Sandbox Code Playgroud)

我希望能够做类似以下的事情

ASSIGNED_PORT=$(docker inspect -f "{{...}} my-container)
Run Code Online (Sandbox Code Playgroud)

我不确定是否有办法通过 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
        },
        ...
        ...
    },
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我希望它能够找到 HostPort,而无需我告诉它任何有关端口 1234 的信息(它应该忽略其下面的 443 和 80)并返回32768.

mon*_*ini 8

执行命令: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
Run Code Online (Sandbox Code Playgroud)

  • 您可以更新它以获取端口,以便我可以将其分配给变量吗? (3认同)