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

docker-compose部署PostgreSQL未监听127.0.0.1无法本地访问问题

解决方案

1. 核心配置修改

  • 端口绑定调整:将postgres服务的端口映射从默认的全网卡绑定改为仅绑定localhost,避免对外暴露
  • 修正app服务的DB_HOST参数多余空格,否则会导致数据库连接失败
  • 指定postgres监听规则,保障容器内服务可正常访问的同时不会泄露到外部网络

2. 修改后完整配置

version: "3.7"
services:
  app:
    build:
      args:
        user: admin
        uid: 1000
      context: .
      dockerfile: Dockerfile
    image: platform
    container_name: app
    restart: unless-stopped
    environment:
      - DB_CONNECTION=pgsql
      - DB_HOST=db # 已删除原配置多余空格
      - DB_PORT=5432
      - DB_DATABASE=database
      - DB_USERNAME=username
    depends_on:
      - db
    working_dir: /var/www/
    volumes:
      - ./:/var/www
    networks:
      - nginx

  db:
    image: postgres:10-alpine
    container_name: db
    restart: unless-stopped
    environment:
        - POSTGRES_USER=${DB_USERNAME}
        - POSTGRES_PASSWORD=${DB_PASSWORD}
        - POSTGRES_DB=${DB_DATABASE}
    command: postgres -c listen_addresses='*' # 保留容器内网访问权限,外部访问由端口绑定规则限制
    ports:
      - "127.0.0.1:5432:5432" # 仅绑定宿主机localhost的5432端口
    volumes:
      - ./db1:/docker-entrypoint-initdb.d/db1
      - ./docker-compose/postgres:/var/lib/postgresql/data
    networks:
      - nginx

  nginx:
    image: nginx:alpine
    container_name: nginx
    restart: unless-stopped
    ports:
      - "8000:80"
    volumes:
      - ./:/var/www
      - ./docker-compose/nginx:/etc/nginx/conf.d/
    networks:
      - nginx
    depends_on:
      - db 

networks:
  nginx:
    driver: bridge

3. 生效方式

先停止原有服务并清理残留配置(操作前注意备份重要数据库数据):

docker-compose down -v

再重新启动服务:

docker-compose up -d

4. 效果验证

  • 宿主机层面:仅能通过127.0.0.1:5432访问postgres服务,使用宿主机其他网卡IP无法访问
  • 同部署栈服务:app、nginx容器可通过服务名db:5432正常访问数据库
  • postgres不会再绑定随机内网地址对外提供服务

内容的提问来源于stack exchange,提问作者Tim Bogdanov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:01