RabbitMQ传输错误排查:Docker Compose启动连接失败解决方案
RabbitMQ容器连接失败问题解决
问题描述
服务此前运行正常,执行docker-compose up或up --build启动容器后,出现RabbitMQ传输错误,日志如下:
ERROR [Server] Connection to transport failed. Trying to reconnect... ERROR [Server] Error: getaddrinfo EAI_AGAIN root2
错误原因
getaddrinfo EAI_AGAIN root2 表明应用容器无法解析主机名root2,即RabbitMQ的地址配置在Docker网络中无法被识别,同时可能存在用户密码不匹配的问题。
解决方案
1. 修正RabbitMQ主机名配置
Docker容器间通过服务名进行DNS解析,你需要将.env中的RABBITMQ_HOST=root2改为Docker Compose配置文件中RabbitMQ服务的实际名称。
比如你的docker-compose.yml里RabbitMQ服务定义为:
services: rabbitmq: image: rabbitmq:3-management environment: RABBITMQ_DEFAULT_USER: Naox RABBITMQ_DEFAULT_PASS: root
则.env中的主机配置需改为:
RABBITMQ_HOST=rabbitmq
2. 统一用户密码配置
你的.env中RABBITMQ_USER=Norm、RABBITMQ_PASS=root,但RabbitMQ容器的默认用户是Naox(来自RABBITMQ_DEFAULT_USER=Naox),两者不匹配会导致认证失败。
- 推荐方案:修改应用的
.env,将用户密码与RabbitMQ容器保持一致:RABBITMQ_USER=Naox RABBITMQ_PASS=root
3. 确保容器处于同一Docker网络
- 若应用和RabbitMQ在同一个
docker-compose.yml文件中,默认会加入同一个专属网络,无需额外配置; - 若为分开的Compose文件,需手动指定共享网络,比如在两个Compose中添加:
并在每个服务的networks: app-network: external: truenetworks字段中指定该网络。
4. 修正代码变量命名错误(可选但建议)
在LibService中,变量名porta实际对应RabbitMQ的主机地址,命名混淆易引发后续维护问题,建议修改为:
@Injectable() export class LibService { constructor( private readonly configService: ConfigService ){} moduloRmq(queue: string): RmqOptions { const usuario = this.configService.get('RABBITMQ_USER') const senha = this.configService.get('RABBITMQ_PASS'); const host = this.configService.get('RABBITMQ_HOST'); // 修正变量名 return { transport: Transport.RMQ, options: { urls: [`amqp://${usuario}:${senha}@${host}`], noAck: false, queue, queueOptions: { durable: true } } } } }
内容的提问来源于stack exchange,提问作者J. Maciel
相关产品推荐
相关产品推荐

