如何配置Docker化Odoo连接现有裸机PostgreSQL服务器?
解决Odoo Docker容器连接外部PostgreSQL的问题
错误原因分析
日志提示could not translate host name "db" to address,说明Odoo启动时未读取到你自定义的db_host = 192.168.33.12配置,反而尝试连接默认的db服务(这是官方示例中内部数据库的服务名)。结合你的配置,需要从配置加载权限、外部数据库访问控制、容器启动命令这几个维度排查修复。
分步解决
1. 确保自定义配置文件被正确加载
- 先检查本地
~/odoo/config目录的权限,Odoo容器内运行的是UID为1000的odoo用户,需让该用户拥有配置文件的读取权限:chmod -R 755 ~/odoo/config chown -R 1000:1000 ~/odoo/config - 修改
docker-compose.yml,在web服务中添加启动命令,强制Odoo加载你的自定义配置文件:version: '3.1' services: web: image: odoo:15.0 ports: - "8069:8069" volumes: - odoo-web-data:/var/lib/odoo - ./config:/etc/odoo - ./addons:/mnt/extra-addons # 指定配置文件路径,强制加载自定义配置 command: odoo -c /etc/odoo/odoo.conf volumes: odoo-web-data:
2. 配置外部PostgreSQL允许Docker服务器访问
- 登录IP为
192.168.33.12的PostgreSQL服务器,修改pg_hba.conf文件(路径通常为/etc/postgresql/<版本号>/main/pg_hba.conf),添加Docker服务器IP的访问规则:替换
<Docker服务器IP>为你的Docker主机实际IP
若允许整个子网访问,可写成host all odooadmin <Docker服务器IP>/32 md5192.168.33.0/24。 - 修改
postgresql.conf文件,设置允许所有IP监听:listen_addresses = '*' - 重启PostgreSQL服务使配置生效:
systemctl restart postgresql
3. 验证数据库用户权限
- 在PostgreSQL服务器上,切换到postgres用户并登录数据库:
sudo -u postgres psql - 检查
odooadmin用户是否存在,且拥有创建数据库的权限(Odoo必须具备该权限):-- 检查用户是否存在 SELECT usename FROM pg_user WHERE usename='odooadmin'; -- 若不存在,创建用户(替换密码为你的实际密码) CREATE USER odooadmin WITH PASSWORD 'one_more_pass'; -- 授予创建数据库权限 ALTER USER odooadmin CREATEDB;
4. 测试连接并重启容器
- 在Docker服务器上,先测试能否连接到外部PostgreSQL:
# 测试端口是否开放 nc -zv 192.168.33.12 5432 # 或用psql直接连接验证 psql -h 192.168.33.12 -U odooadmin -d postgres - 重启Odoo容器:
docker-compose down docker-compose up -d - 查看容器日志确认连接状态:
docker-compose logs -f web
内容的提问来源于stack exchange,提问作者Nil
相关产品推荐
相关产品推荐

