Azure中Docker Compose部署Odoo与PostgreSQL连接失败求助
排查Azure中Docker Compose部署Odoo+PostgreSQL的连接失败问题
核心问题定位
从错误日志来看,Odoo容器解析db服务到127.0.0.1后连接被拒绝,大概率是PostgreSQL容器未正常就绪、Docker网络解析异常,或是Azure存储卷权限导致PostgreSQL启动失败。
具体排查与修复步骤
检查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目录无读写权限。修复Azure存储卷兼容性问题
- 优先建议改用Azure磁盘卷(
azure_dd)存储PostgreSQL数据,磁盘卷的权限控制与IO性能更适配数据库需求; - 若坚持使用Azure文件卷,可在db服务中添加初始化命令修正目录权限:
db: # 保留原有配置 command: > bash -c "chown -R postgres:postgres /var/lib/postgresql/data/pgdata && exec postgres"
- 优先建议改用Azure磁盘卷(
解决容器启动顺序与就绪等待问题
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 # 保留原有配置验证Docker网络解析
进入Odoo容器测试db服务的网络连通性:docker-compose exec odoocontainer ping db若ping不通,说明Docker Swarm网络(因使用
deploy配置,默认走Swarm网络)存在异常,需确认两个服务处于同一网络中,或检查Azure容器实例的网络配置是否允许服务间通信。确认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
相关产品推荐
相关产品推荐

