背景

使用如下dockcer命令启动一个springboot服务。(删除无关内容)

docker run -e DUBBO_IP_TO_REGISTRY=121.40.178.113 -e DUBBO_PORT_TO_REGISTRY=20880 -e DUBBO_PORT_TO_BIND=20880 --name app-xxxx -p 8000:8000 -p 9998:9998 -p 20880:20880 -d $image --net=host --spring.profiles.active=test

它使用了–net=host,会导致-p参数失效。目前很多应用都使用了–net=host,需要删除它并使用精准的端口映射。

目标

需要知道某个应用对外开放的具体端口。

解决过程

服务使用openjdk:8u322-jdk-bullseye作为基础镜像。

# 进入容器
root@e6xxx:/data/app# apt-get update
root@e6xxx:/data/app# apt-get install -y net-tools
# 显示服务监听的端口
root@e6xxx:/data/app# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:9998            0.0.0.0:*               LISTEN      1/java              
tcp        0      0 0.0.0.0:22222           0.0.0.0:*               LISTEN      1/java              
tcp        0      0 0.0.0.0:20880           0.0.0.0:*               LISTEN      1/java              
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      1/java              
udp        0      0 0.0.0.0:40635           0.0.0.0:*                           1/java              
udp        0      0 0.0.0.0:46705           0.0.0.0:*                           1/java              
udp        0      0 0.0.0.0:55157           0.0.0.0:*                           1/java              
udp        0      0 0.0.0.0:39416           0.0.0.0:*                           1/java     

## 上面的监听列表中有22222,不在docker run命令的-p中,查了一下也没在代码中。
root@e6xxx:/data/app# apt-get install -y iproute2
# 查看端口占用情况
root@e6xxx:/data/app# ss -tulnp
Netid                State                 Recv-Q                 Send-Q                                 Local Address:Port                                  Peer Address:Port                Process                                       
udp                  UNCONN                0                      0                                            0.0.0.0:40635                                      0.0.0.0:*                    users:(("java",pid=1,fd=25))                 
udp                  UNCONN                0                      0                                            0.0.0.0:46705                                      0.0.0.0:*                    users:(("java",pid=1,fd=67))                 
udp                  UNCONN                0                      0                                            0.0.0.0:55157                                      0.0.0.0:*                    users:(("java",pid=1,fd=138))                
udp                  UNCONN                0                      0                                            0.0.0.0:39416                                      0.0.0.0:*                    users:(("java",pid=1,fd=65))                 
tcp                  LISTEN                0                      128                                          0.0.0.0:9998                                       0.0.0.0:*                    users:(("java",pid=1,fd=116))                
tcp                  LISTEN                0                      128                                          0.0.0.0:22222                                      0.0.0.0:*                    users:(("java",pid=1,fd=63))                 
tcp                  LISTEN                0                      128                                          0.0.0.0:20880                                      0.0.0.0:*                    users:(("java",pid=1,fd=137))                
tcp                  LISTEN                0                      100                                          0.0.0.0:8000                                       0.0.0.0:*                    users:(("java",pid=1,fd=139)) 
# 退出docker容器 尝试telnet一下
[root@sh5xZ prometheus]# telnet localhost 22222
Trying ::1...
Connected to localhost.
Escape character is '^]'.
   ___   __  __ ___   ___   ____     
  / _ \ / / / // _ ) / _ ) / __ \  
 / // // /_/ // _  |/ _  |/ /_/ /    
/____/ \____//____//____/ \____/   
dubbo>
#此时quit退出,按ctrl+]

Dubbo QOS 端口说明

  • 默认 22222
  • 主要功能:在运行时查看 Dubbo 服务状态、关闭服务、远程执行命令等
  • 安全风险:任何能访问这个端口的人都可以执行 Dubbo QOS 命令
  • 生产环境通常关闭 或仅限内网访问

目前不需要开放该端口,直接把–net=host删除即可。

作者:张三  创建时间:2025-12-12 10:51
最后编辑:张三  更新时间:2026-01-14 17:39