You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wildfly Docker容器连接PostgreSQL 5432端口被拒绝如何解决?

问题分析

从错误日志可以看到两个核心启动失败原因:

  1. 数据库连接被拒绝:Wildfly尝试连接localhost:5432失败,容器内的localhost指向自身,而非PostgreSQL容器,导致无法访问数据库服务。
  2. WSDL服务访问失败:WAR包内硬编码了http://localhost:9899/addr_searcher?wsdl地址,该服务未在Wildfly容器内启动或地址配置错误。
解决方案

1. 修复PostgreSQL数据源连接地址

修改standalone-full.xml中的数据源连接URL,使用Docker Compose的服务名访问数据库:

<datasource jndi-name="java:/PostgresDS" pool-name="PostgresDS" enabled="true">
    <connection-url>
        jdbc:postgresql://database:5432/postgres
    </connection-url>
    <!-- 其他配置保持不变 -->
</datasource>
  • 原因:在同一Docker网络resolute中,容器可通过服务名(database)直接通信,无需使用宿主机映射端口5433,PostgreSQL容器内部默认端口为5432。

2. 修正Dockerfile的WAR包部署路径

修改Dockerfile中WAR包的复制命令,直接将WAR包放到Wildfly的部署目录,避免手动复制操作:

# 替换原WAR包复制命令
ADD ./my-war-file.war /opt/jboss/wildfly/standalone/deployments/

3. 确保PostgreSQL完全就绪后启动Wildfly

在docker-compose.yml的database服务中添加健康检查,保证数据库启动完成后再启动Wildfly:

services:
    database:
        image: postgres:9.4
        ports:
            - "5433:5432"
        environment:
            - POSTGRES_USER=postgres
            - POSTGRES_PASSWORD=123456
            - POSTGRES_DB=postgres
        networks:
            - resolute
        # 添加健康检查
        healthcheck:
            test: ["CMD-SHELL", "pg_isready -U postgres"]
            interval: 5s
            timeout: 5s
            retries: 5
    wildfly:
        depends_on:
            # 依赖数据库的健康状态
            database:
                condition: service_healthy
        # 其他配置保持不变

4. 修复WSDL服务地址问题

  • 如果addr_searcher是外部服务:修改WAR包内的配置,将localhost:9899替换为可访问的外部服务地址。
  • 如果addr_searcher是容器部署的服务:将其加入resolute网络,使用服务名替代localhost访问。
验证步骤
  1. 停止当前运行的容器:docker-compose down
  2. 重新构建并启动服务:docker-compose up --build
  3. 查看Wildfly日志,确认数据库连接正常且WAR包部署成功。

内容的提问来源于stack exchange,提问作者Nguyễn Nhật Trường

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:13:10