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

如何通过docker-compose配置容器访问本地PostgreSQL数据库

配置Docker Compose访问本地PostgreSQL数据库

要让你的Docker容器(Web服务器、守护进程)访问宿主机localhost:5432上的PostgreSQL,结合你已有的自定义桥接网络,可按以下方式配置docker-compose.yaml:

完整配置示例

version: '3.8'

services:
  web_server:
    # 替换为你的Web服务镜像
    image: nginx:alpine
    networks:
      - docker_example_network
    # 根据需求添加ports、volumes等其他配置
    environment:
      # 核心:用Docker内置域名指向宿主机
      DB_HOST: host.docker.internal
      DB_PORT: 5432
      DB_USER: 你的数据库用户名
      DB_PASSWORD: 你的数据库密码
      DB_NAME: 你的数据库名

  daemon_service:
    # 替换为你的守护进程镜像
    image: your-daemon-image:latest
    networks:
      - docker_example_network
    environment:
      DB_HOST: host.docker.internal
      DB_PORT: 5432
      # 补充其他数据库连接参数

# 你提供的现有网络配置
networks:
  docker_example_network:
    driver: bridge
    name: docker_example_network

关键细节说明

  • host.docker.internal的兼容性:这个Docker内置域名用于容器访问宿主机服务,支持Docker 20.10+的Linux系统、macOS和Windows。如果是旧版Linux Docker,需给服务添加extra_hosts配置:
    services:
      web_server:
        # ...其他配置
        extra_hosts:
          - "host.docker.internal:host-gateway"
    
  • PostgreSQL的远程访问权限:必须确保本地PostgreSQL允许容器所在网络访问:
    1. 修改postgresql.conf,设置listen_addresses = '*'
    2. 修改pg_hba.conf,添加容器网段的访问规则(默认桥接网段为172.18.0.0/16,若自定义网络网段不同需替换):
      host    你的数据库名     你的用户名     172.18.0.0/16     scram-sha-256
      
  • 替代方案:使用宿主机IP:如果host.docker.internal不可用,可直接指定宿主机的局域网IP(如192.168.1.100)作为DB_HOST,但需注意IP变化时要同步更新配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:35:08