我在Dockerfile中有一个带有EXPOSE 27017的容器,公共(public)ip和已发布的端口27017。ice inspect输出中包含相关信息:

...
"PortBindings": {
    "27017/tcp": [
        {
            "HostPort": "27017"
        }
    ]
},
...
"NetworkSettings": {
    "Bridge": "",
    "Gateway": "",
    "IpAddress": "172.31.0.16",
    "IpPrefixLen": 0,
    "PortMapping": null,
    "Ports": {
        "27017/tcp": [
            {
                "HostIp": "134.168.18.146",
                "HostPort": "27017"
            }
        ]
    },
    "PublicIpAddress": "134.168.18.146"
},

不过,我无法使用公共(public)ip连接到数据库,并且nmap显示端口27017已过滤。

是否有其他步骤来暴露容器的端口?

最佳答案

这是因为nmap将带有SYN标志的数据包发送到服务器。它没有响应,但是当向其他关闭的端口发送SYN时,标志RST,ACK响应。然后,由于防火墙(或自己的服务器)阻止了响应数据包,因此对端口27017进行了过滤。

您可以通过hping进行检查

10-06 07:11