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

Azure中Docker Compose部署Odoo与PostgreSQL连接失败求助

排查Azure中Docker Compose部署Odoo+PostgreSQL的连接失败问题

核心问题定位

从错误日志来看,Odoo容器解析db服务到127.0.0.1后连接被拒绝,大概率是PostgreSQL容器未正常就绪、Docker网络解析异常,或是Azure存储卷权限导致PostgreSQL启动失败。

具体排查与修复步骤

  1. 检查PostgreSQL容器状态与启动日志
    执行以下命令确认db容器是否正常运行及初始化状态:

    docker-compose logs db
    docker-compose ps db
    

    重点查看日志中是否出现database system is ready to accept connections,若未出现,说明容器启动失败——Azure文件卷权限不兼容是常见原因:PostgreSQL运行用户(postgres)对挂载的/var/lib/postgresql/data/pgdata目录无读写权限。

  2. 修复Azure存储卷兼容性问题

    • 优先建议改用Azure磁盘卷(azure_dd)存储PostgreSQL数据,磁盘卷的权限控制与IO性能更适配数据库需求;
    • 若坚持使用Azure文件卷,可在db服务中添加初始化命令修正目录权限:
      db:
        # 保留原有配置
        command: >
          bash -c "chown -R postgres:postgres /var/lib/postgresql/data/pgdata && exec postgres"
      
  3. 解决容器启动顺序与就绪等待问题
    depends_on仅保证启动顺序,不保证服务就绪。需为db服务添加健康检查,让Odoo等待PostgreSQL完全就绪后再启动:

    db:
      # 保留原有配置
      healthcheck:
        test: ["CMD-SHELL", "pg_isready -U odoo -d postgres"]
        interval: 10s
        timeout: 5s
        retries: 5
    
    odoocontainer:
      depends_on:
        db:
          condition: service_healthy
      # 保留原有配置
    
  4. 验证Docker网络解析
    进入Odoo容器测试db服务的网络连通性:

    docker-compose exec odoocontainer ping db
    

    若ping不通,说明Docker Swarm网络(因使用deploy配置,默认走Swarm网络)存在异常,需确认两个服务处于同一网络中,或检查Azure容器实例的网络配置是否允许服务间通信。

  5. 确认PostgreSQL监听配置
    默认PostgreSQL镜像会监听所有IP,但如果存在自定义配置,需确认postgresql.conf中listen_addresses = '*':

    docker-compose exec db cat /var/lib/postgresql/data/pgdata/postgresql.conf | grep listen_addresses
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:15:25