1. 问题现象与初步排查
最近在部署一个基于Docker的Java应用时,遇到了一个奇怪的问题:应用能够正常连接到Nacos的8848端口,却始终无法连接到gRPC的9848端口。这个问题困扰了我好几天,经过一系列排查和测试,终于找到了根本原因和解决方案。
首先让我们明确一下问题表现:
- 应用通过Docker Compose部署
- 使用
network_mode: host网络模式 - 能够正常连接Nacos的8848端口
- 无法连接gRPC的9848端口
- 在容器内和宿主机上使用telnet测试9848端口是通的
- 改为端口映射模式后能正常启动
提示:Nacos 2.0版本开始新增了gRPC的9848端口用于客户端与服务端之间的通信,这是与之前版本的一个重要区别。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境与配置分析
2.1 Docker Compose配置解析
让我们先仔细看一下当前的Docker Compose配置:
yaml复制version: '3.8'
services:
aizj-aiproxy:
image: dezhu-java-base:jdk8
network_mode: host
user: "1002:1002"
restart: unless-stopped
container_name: aizj-aiproxy
command:
- /bin/sh
- -c
- "/home/finance/App/app_starter java -server -Xms2048m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=90 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/finance/
