Docker Compose部署时Spring Boot连接Redis被拒问题求助
问题解决方案与排查方向
- 配置加载优先级排查
报错明确显示应用使用了Spring Data Redis默认的localhost:6379连接地址,说明自定义的spring.redis.host配置没有生效,首先按以下步骤核对:- 检查jar包内置配置文件:执行
jar tf app.jar | grep application.properties确认配置文件被打入jar包,再执行jar xf app.jar BOOT-INF/classes/application.properties提取文件,核对内容是否包含spring.redis.host=redis-db配置。 - 强制指定启动参数验证:修改Dockerfile的启动命令,直接在运行时传入Redis配置,优先级高于所有内置配置:
重新构建镜像启动后如果连接正常,即可证明是原有配置加载逻辑存在问题。FROM openjdk:8-jre-alpine VOLUME /tmp COPY app.jar app.jar EXPOSE 8082 ENTRYPOINT ["java", "-jar", "app.jar", "--spring.redis.host=redis-db", "--spring.redis.port=6379"] - 检查jar包内置配置文件:执行
- 硬编码配置排查
检查项目中是否存在手动编写的Redis连接工厂、RedisTemplate配置类,确认是否有硬编码host=localhost的逻辑,手动配置的连接参数优先级高于application.properties配置。 - Docker网络连通性排查
当前使用的links是Docker Compose已弃用的旧特性,容易出现域名解析异常,建议替换为自定义网桥保证服务互通,修改docker-compose.yml如下:
修改后启动服务,可进入web容器手动验证连通性:version: "3.9" services: web: build: . ports: - "8082:8082" depends_on: - redis networks: - app-network redis: image: redis container_name: redis hostname: redis-db ports: - "6379:6379" command: redis-server --port 6379 --bind 0.0.0.0 --protected-mode no networks: - app-network networks: app-network: driver: bridge# 进入web容器 docker exec -it sgartner-web-1 sh # 验证域名解析 ping redis-db # 验证端口连通性 nc -zv redis-db 6379
内容的提问来源于stack exchange,提问作者pls_help
相关产品推荐
相关产品推荐

