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

Docker Compose部署Odoo17多实例连接PostgreSQL16失败求助

问题排查与解决方案

核心问题分析

Odoo容器启动后立即退出,日志显示Database connection failure: could not translate host name 'db' to address: Temporary failure in name resolution,本质是Odoo容器无法解析到对应的PostgreSQL服务主机名,结合你要部署4组独立容器的需求,大概率是以下原因:

  • 多组容器共用默认网络,导致服务名(如db)冲突,Odoo无法定位到对应组的PostgreSQL
  • 每组未配置独立网络,Odoo与对应PostgreSQL不在同一网络段内
  • Odoo的数据库主机配置错误,指向了不存在的服务名

正确的Docker Compose配置示例

以下是4组独立Odoo17+PostgreSQL16的配置,每组完全隔离,端口、数据库配置互不干扰:

version: '3.8'

# 第一组:Odoo17 + PostgreSQL16
services:
  odoo1:
    image: odoo:17
    container_name: odoo1
    ports:
      - "8069:8069"
    environment:
      - HOST=db1
      - USER=odoo_user1
      - PASSWORD=odoo_pass1
      - DB_NAME=odoo_db1
    volumes:
      - odoo1_data:/var/lib/odoo
      - odoo1_addons:/mnt/extra-addons
    networks:
      - odoo_net1
    depends_on:
      - db1

  db1:
    image: postgres:16
    container_name: db1
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=odoo_user1
      - POSTGRES_PASSWORD=odoo_pass1
      - POSTGRES_DB=odoo_db1
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - db1_data:/var/lib/postgresql/data
    networks:
      - odoo_net1

# 第二组:Odoo17 + PostgreSQL16
services:
  odoo2:
    image: odoo:17
    container_name: odoo2
    ports:
      - "8070:8069"
    environment:
      - HOST=db2
      - USER=odoo_user2
      - PASSWORD=odoo_pass2
      - DB_NAME=odoo_db2
    volumes:
      - odoo2_data:/var/lib/odoo
      - odoo2_addons:/mnt/extra-addons
    networks:
      - odoo_net2
    depends_on:
      - db2

  db2:
    image: postgres:16
    container_name: db2
    ports:
      - "5433:5432"
    environment:
      - POSTGRES_USER=odoo_user2
      - POSTGRES_PASSWORD=odoo_pass2
      - POSTGRES_DB=odoo_db2
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - db2_data:/var/lib/postgresql/data
    networks:
      - odoo_net2

# 第三组:Odoo17 + PostgreSQL16
services:
  odoo3:
    image: odoo:17
    container_name: odoo3
    ports:
      - "8071:8069"
    environment:
      - HOST=db3
      - USER=odoo_user3
      - PASSWORD=odoo_pass3
      - DB_NAME=odoo_db3
    volumes:
      - odoo3_data:/var/lib/odoo
      - odoo3_addons:/mnt/extra-addons
    networks:
      - odoo_net3
    depends_on:
      - db3

  db3:
    image: postgres:16
    container_name: db3
    ports:
      - "5434:5432"
    environment:
      - POSTGRES_USER=odoo_user3
      - POSTGRES_PASSWORD=odoo_pass3
      - POSTGRES_DB=odoo_db3
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - db3_data:/var/lib/postgresql/data
    networks:
      - odoo_net3

# 第四组:Odoo17 + PostgreSQL16
services:
  odoo4:
    image: odoo:17
    container_name: odoo4
    ports:
      - "8072:8069"
    environment:
      - HOST=db4
      - USER=odoo_user4
      - PASSWORD=odoo_pass4
      - DB_NAME=odoo_db4
    volumes:
      - odoo4_data:/var/lib/odoo
      - odoo4_addons:/mnt/extra-addons
    networks:
      - odoo_net4
    depends_on:
      - db4

  db4:
    image: postgres:16
    container_name: db4
    ports:
      - "5435:5432"
    environment:
      - POSTGRES_USER=odoo_user4
      - POSTGRES_PASSWORD=odoo_pass4
      - POSTGRES_DB=odoo_db4
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - db4_data:/var/lib/postgresql/data
    networks:
      - odoo_net4

# 定义所有独立卷和网络
volumes:
  odoo1_data:
  odoo1_addons:
  db1_data:
  odoo2_data:
  odoo2_addons:
  db2_data:
  odoo3_data:
  odoo3_addons:
  db3_data:
  odoo4_data:
  odoo4_addons:
  db4_data:

networks:
  odoo_net1:
    driver: bridge
  odoo_net2:
    driver: bridge
  odoo_net3:
    driver: bridge
  odoo_net4:
    driver: bridge

关键配置要点

  • 独立网络:每组配置专属的bridge网络(如odoo_net1),确保组内容器互通,组间完全隔离
  • 唯一服务名/容器名:数据库服务名设为db1、db2等,Odoo的HOST环境变量对应指向这些服务名,Docker Compose会自动在组内网络解析这些名称
  • 端口不冲突:Odoo映射到主机的8069-8072,PostgreSQL映射到5432-5435,避免端口占用
  • 环境变量匹配:每组的POSTGRES_USER、POSTGRES_PASSWORD、POSTGRES_DB必须和Odoo的USER、PASSWORD、DB_NAME完全一致
  • 独立数据卷:每组使用单独的卷存储Odoo和PostgreSQL数据,防止数据混淆

排查验证步骤

  1. 检查容器状态:执行docker ps -a,确认PostgreSQL容器处于Up状态,Odoo容器是否正常启动
  2. 测试网络连通性:进入任意Odoo容器,ping对应数据库服务名,比如docker exec -it odoo1 ping db1,如果能ping通说明网络配置正常
  3. 查看完整日志:执行docker logs odoo1(替换为对应Odoo容器名),确认是否有其他错误信息
  4. 清理旧容器:如果之前有残留容器,执行docker compose down -v清理旧容器和卷,再重新启动

内容的提问来源于stack exchange,提问作者Néo SONDI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:57:52