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

标签 sed grep docker dockerfile

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

docker run -d --name my-container -p 1234 my-image

并运行 docker ps显示该图像的端口绑定(bind)是...
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 .

最佳答案

执行命令: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

关于sed - 如何从检查 docker 容器中获取暴露的端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31543356/

相关文章:

c - 如何在程序输出本身中查看当前进程状态

regex - 如何使用 sed、awk 或其他 OS X 工具替换文件(JSON 格式)中的多行 block ?

linux - 替换文本文件中每一行的前六个逗号

linux - 如果最多有两个字符不同,则匹配一个字符串

linux - Grep 在 .htaccess 中搜索重定向

regex - SED:匹配前寻址两行

awk - 在与 sed/awk 进行第一次模式匹配之前删除所有内容

docker - Container OS下可写无状态分区的用途

Dockerfile如何添加localhost别名

docker - 使用特定 docker 用户时无法执行 npm update