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

跨Docker Compose文件:解决server服务无法访问db服务5432端口问题

问题:Docker Compose跨文件服务无法访问数据库端口

我有两个Docker Compose文件,希望让server服务访问db服务的5432端口。已将两个服务加入同一个共享网络custom_network,db服务已暴露5432端口,但server服务仍无法访问该端口。另外由于5432端口已被db服务映射到主机,无法在server服务中创建5432:5432的端口映射。

file1.yaml

version: '3.9'
services:
  db:
    image: library/postgres:13-alpine
    container_name: local-dev-db
    depends_on:
      cloudsql-proxy:
        condition: service_started
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=postgres
      - PGUSER=postgres
    ports:
      - 5432:5432  # host port:container port
    expose:
      - 5432
    networks:
      - custom_network
networks:
  custom_network:
    name: custom_network

file2.yaml

version: '3.9'
services:
  server:
    image: custom:latest
    container_name: django-runserver
    tty: true
    volumes:
      - ../:/code/project
    working_dir: /code/project
    command: bash -c "python3 manage.py runserver"
    networks:
      - custom_network
    ports:
      - 8000:8000
    # network_mode: host  # works on Linux, not mac
networks:
  custom_network:
    external:
      name: custom_network
解决方案
  • 修正数据库连接地址:同一Docker网络内,容器间访问无需依赖主机端口映射。server服务连接数据库时,不要用localhost:5432,改用服务名db:5432或容器名local-dev-db:5432即可。
  • 检查依赖服务状态:file1.yaml中db服务依赖cloudsql-proxy,但当前文件未定义该服务。若不需要云代理,直接删除depends_on配置;若需要则确保cloudsql-proxy服务正常启动。
  • 验证网络关联:执行命令docker network inspect custom_network,确认db和server容器都已加入该网络。
  • 确认数据库服务正常:执行docker logs local-dev-db,查看日志中是否出现database system is ready to accept connections,确保PostgreSQL服务已正常启动并监听5432端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:53:21