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

PostgreSQL Docker容器端口映射后仍监听5432及健康检查异常

PostgreSQL Docker容器端口与健康检查问题解决

端口异常问题解决

你说test-db指定了5433端口但docker ps还显示5432活跃,大概率是配置没到位:

  • 如果是想让容器内部的PostgreSQL直接监听5433端口,别只改ports映射,要在docker-compose.yml的test-db服务里加command: -p 5433,这会让PostgreSQL启动时用5433端口。同时ports映射写成"5433:5433",这样docker ps里就会显示5433端口的映射。
  • 要是只是想把宿主机器的5433端口映射到容器内部默认的5432,那ports配置是"5433:5432",docker ps显示0.0.0.0:5433->5432/tcp是正常的,这时候容器内部还是用5432,你用宿主的5433访问就行。

健康检查异常修复

pg_isready根本没有小写的-u参数,指定用户得用大写的-U!之前的错误就是因为参数写错了。
另外,直接执行pg_isready会默认用当前用户(root)连接,但PostgreSQL里没有root角色,所以必须指定你创建的inclasstoday用户。

正确的健康检查命令应该是:

pg_isready -U inclasstoday -p 5433

把docker-compose.yml里的healthcheck部分改成这样就行:

healthcheck:
  test: ["CMD-SHELL", "pg_isready -U inclasstoday -p 5433"]
  interval: 5s
  timeout: 5s
  retries: 5

完整docker-compose示例参考

services:
  dev-db:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: inclasstoday
      POSTGRES_PASSWORD: your_password
      POSTGRES_DB: dev_db
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U inclasstoday -p 5432"]
      interval: 5s
      timeout: 5s
      retries: 5

  test-db:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: inclasstoday
      POSTGRES_PASSWORD: your_password
      POSTGRES_DB: test_db
    command: -p 5433  # 让容器内部PostgreSQL监听5433端口
    ports:
      - "5433:5433"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U inclasstoday -p 5433"]
      interval: 5s
      timeout: 5s
      retries: 5

验证方法

  • 启动容器后,跑docker ps,看test-db的端口列是不是显示0.0.0.0:5433->5433/tcp
  • 进容器执行pg_isready -U inclasstoday -p 5433,应该返回accepting connections
  • 用docker ps看容器状态,健康检查应该显示healthy

内容的提问来源于stack exchange,提问作者Fred Chasin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:44:53