odoo 12 psycopg2.OperationalError:无法将主机名“db”转换为地址

Posted

技术标签:

【中文标题】odoo 12 psycopg2.OperationalError:无法将主机名“db”转换为地址【英文标题】:odoo 12 psycopg2.OperationalError: could not translate host name "db" to address 【发布时间】:2020-01-16 22:47:09 【问题描述】:

受影响的版本:

odoo 12,postgresql 10

重现步骤:

码头集装箱 odoo 容器几个月来工作得很好,但是在尝试升级 odoo 版本之后.. 我收到以下错误..

psycopg2.OperationalError: 无法将主机名“db”转换为地址

Postgresql 容器端口:5432 两个容器 [odoo 和 Postgresql] 都加入了同一个网络

当前行为:

内部服务器错误 服务器遇到内部错误,无法完成您的请求。要么是服务器超载,要么是应用程序出错。

日志:

文件“/usr/lib/python3/dist-packages/odoo/sql_db.py”,第 171 行,在 init 中,self._cnx = pool.borrow(dsn),文件“/ usr/lib/python3/dist-packages/odoo/sql_db.py”,第 540 行,在 _locked 中,返回 fun(self, *args, **kwargs) ,文件“/usr/lib/python3/dist-packages/odoo /sql_db.py”,第 608 行,借用,**connection_info),文件“/usr/lib/python3/dist-packages/psycopg2/init.py”,第 130 行,在连接中, conn = _connect(dsn, connection_factory=connection_factory, **kwasync) ,psycopg2.OperationalError: could not translate host name "db" to address: Name or service not known - - - ,2019-09-15 15:01:26,057 1信息? odoo.service.server: 启动关机,2019-09-15 15:01:26,058 1 INFO ? odoo.service.server:再次按 CTRL-C 或发送第二个信号以强制关闭。 ,2019-09-15 15:01:30,959 1 信息? odoo:Odoo 版本 12.0-20190816 ,2019-09-15 15:01:30,960 1 信息? odoo:使用 /etc/odoo/odoo.conf 中的配置文件,2019-09-15 15:01:30,960 1 INFO ? odoo: 插件路径: ['/var/lib/odoo/addons/12.0', '/mnt/extra-addons', '/usr/lib/python3/dist-packages/odoo/addons'] ,2019-09- 15 15:01:30,961 1 信息? odoo: 数据库: odoo@db:5432 ,2019-09-15 15:01:31,104 1 信息? odoo.addons.base.models.ir_actions_report:将在 /usr/local/bin/wkhtmltopdf ,2019-09-15 15:01:31,265 1 INFO 处使用 Wkhtmltopdf 二进制文件? odoo.service.server: HTTP 服务 (werkzeug) 在 574638c2fd44:8069 ,2019-09-15 15:01:40,043 1 INFO 上运行? odoo.http: HTTP 配置静态文件 ,2019-09-15 15:01:40,072 1 INFO ? odoo.sql_db:与数据库的连接失败,2019-09-15 15:01:40,079 1 信息? werkzeug: - - [15/Sep/2019 15:01:40] “GET / HTTP/1.1” 500 - 0 0.000 0.031 ,2019-09-15 15:01:40,086 1 错误? werkzeug:请求时出错:,文件“/usr/lib/python3/dist-packages/odoo/http.py”,第 1320 行,在 call 中,返回 self.dispatch(environ, start_response) ,文件“/usr/lib/python3/dist-packages/odoo/http.py”,第 1293 行,在 call 中,返回 self.app(environ, start_wrapped) ,文件“/usr/lib/ python3/dist-packages/werkzeug/wsgi.py",第 599 行,在 call 中,返回 self.app(environ, start_response) ,文件 "/usr/lib/python3/dist-packages/odoo /http.py”,第 1453 行,在 dispatch 中,self.setup_db(httprequest),文件“/usr/lib/python3/dist-packages/odoo/http.py”,第 1376 行,在 setup_db 中,httprequest.session.db = db_monodb(httprequest) ,文件“/usr/lib/python3/dist-packages/odoo/http.py”,第 1537 行,在 db_monodb 中,dbs = db_list(True, httprequest) ,文件“/usr/lib/python3/ dist-packages/odoo/http.py”,第 1504 行,在 db_list 中,dbs = odoo.service.db.list_dbs(force),文件“/usr/lib/python3/dist-packages/odoo/service/db.py ",第 375 行,在 list_dbs 中,带有关闭(db.curs or()) as cr: ,文件“/usr/lib/python3/dist-packages/odoo/sql_db.py”,第 657 行,在 cursor 中,返回 Cursor(self.pool, self.dbname, self. dsn, serialized=serialized) , 文件 "/usr/lib/python3/dist-packages/odoo/sql_db.py", 第 171 行, in __init , self._cnx = pool.borrow(dsn) , File " /usr/lib/python3/dist-packages/odoo/sql_db.py”,第 540 行,在 _locked 中,返回 fun(self, *args, **kwargs) ,文件“/usr/lib/python3/dist-packages/ odoo/sql_db.py”,第 608 行,借用,**connection_info),文件“/usr/lib/python3/dist-packages/psycopg2/init.py”,第 130 行,连接中, conn = _connect(dsn, connection_factory=connection_factory, **kwasync) ,psycopg2.OperationalError: could not translate host name "db" to address: Name or service not known - - - ''''

【问题讨论】:

这似乎是一个 DNS 问题。要确认,请转到您的 docker 实例 bash shell 并运行:host <database server name> 它应该返回相同的错误消息。 你好 Adan,结果 >> 的地址为 172.18.0.2 【参考方案1】:

这里是解决方案。

@ odoo.conf 我更改了db_host = my_database_server_ip 以前是db_host = db 重启容器

它恢复工作:)

【讨论】:

【参考方案2】:

您似乎缺少 docker 命令的 --link 选项。

您首先应该让 postgresql 容器运行:

$ docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:10

如您所见,容器名称为db

然后您应该启动并运行 odoo 实例:

$ docker run -p 8069:8069 --name odoo --link db:db -t odoo

正如您在此处看到的,--link 选项告诉odoo 容器将所有请求映射到db 主机到名为db 的容器

【讨论】:

您好,艾哈迈德,感谢您的回复。这两个容器已经链接,并且运行了好几个月:docker network create --driver bridge ov-nwsudo docker run -v ov-db-data:/var/lib/postgresql/data -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --network ov-nw --name db-ov postgres:10sudo docker run -v odoo_addons:/mnt/extra-addons -v ov_data:/var/lib/odoo -p 8008:8069 --network ov-nw --name odoo-ov --link db-ov:db -t odoo:latest 但突然-我猜在 odoo 图像更新后-出现错误有什么想法吗?

以上是关于odoo 12 psycopg2.OperationalError:无法将主机名“db”转换为地址的主要内容,如果未能解决你的问题,请参考以下文章

05.odoo12开源框架学习

odoo开发学习 --修改odoo12代码,允许跨域访问

mac odoo 12 虚拟环境搭建及 依赖安装

odoo12 - 关于odoo12在windows10上运行的配置问题

odoo12配置centos7服务器域名访问

Odoo12开发环境部署在Windows系统