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

使用docker-compose运行Odoo时服务无法访问,数据库连接超时求助

问题:Docker-Compose运行Odoo时数据库连接超时错误

我尝试用docker-compose运行Odoo,单独启动Postgres和Odoo容器时服务可正常访问,但使用最简docker-compose示例时,Postgres启动日志显示已就绪,Odoo容器却出现连接超时错误并退出。

错误日志

Attaching to testdocker_db_1, testdocker_web_1
db_1   | 
db_1   | PostgreSQL Database directory appears to contain a database; Skipping initialization
db_1   | 
db_1   | 2022-09-01 14:54:47.015 UTC [1] LOG:  starting PostgreSQL 14.5 (Debian 14.5-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
db_1   | 2022-09-01 14:54:47.016 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db_1   | 2022-09-01 14:54:47.016 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db_1   | 2022-09-01 14:54:47.021 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1   | 2022-09-01 14:54:47.027 UTC [26] LOG:  database system was shut down at 2022-09-01 14:54:22 UTC
db_1   | 2022-09-01 14:54:47.033 UTC [1] LOG:  database system is ready to accept connections
web_1  | Database connection failure: connection to server at "db" (172.21.0.2), port 5432 failed: Connection timed out
web_1  |    Is the server running on that host and accepting TCP/IP connections?
web_1  | 
testdocker_web_1 exited with code 1

使用的docker-compose.yml

version: '3.1'
services:
  web:
    image: odoo:15.0
    depends_on:
      - db
    ports:
      - "8069:8069"
  db:
    image: postgres:14
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=odoo
      - POSTGRES_USER=odoo

排查方案

1. 解决depends_on的局限性

depends_on仅保证容器启动顺序,不确保Postgres服务完全就绪。添加健康检查,让Odoo等待Postgres真正可用:

version: '3.1'
services:
  web:
    image: odoo:15.0
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "8069:8069"
  db:
    image: postgres:14
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=odoo
      - POSTGRES_USER=odoo
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U odoo -d postgres"]
      interval: 5s
      timeout: 5s
      retries: 5

2. 清理旧容器与数据卷

之前单独启动的Postgres可能留下不一致的旧数据卷,执行以下命令清理后重新启动:

docker-compose down -v
docker-compose up -d

3. 验证网络连通性

进入Odoo容器手动测试Postgres连接,确认网络是否正常:

docker exec -it testdocker_web_1 bash
psql -h db -U odoo -d postgres

如果连接失败,需检查Docker网络配置;如果成功,说明是Odoo启动时机过早,健康检查方案可解决。

4. 手动指定自定义网络

添加显式网络配置,避免默认网络出现异常:

version: '3.1'
services:
  web:
    image: odoo:15.0
    depends_on:
      - db
    ports:
      - "8069:8069"
    networks:
      - odoo-network
  db:
    image: postgres:14
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=odoo
      - POSTGRES_USER=odoo
    networks:
      - odoo-network
networks:
  odoo-network:
    driver: bridge

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:33:33