And*_*sen 2 postgresql psycopg2 docker
我们刚刚过渡到使用 Docker 进行开发并正在使用该ubuntu:18.04镜像。我们注意到psycopg2几分钟后使用的查询失败了。这个答案使用以下参数解决了问题keepalives:
self.db = pg.connect(
dbname=config.db_name,
user=config.db_user,
password=config.db_password,
host=config.db_host,
port=config.db_port,
keepalives=1,
keepalives_idle=30,
keepalives_interval=10,
keepalives_count=5
)
Run Code Online (Sandbox Code Playgroud)
这对我们也有效,但为什么会有效呢?psycopg2 文档没有深入了解参数的作用,但是,这个第三方文档和这个 postgres文档都做了。
问题是,docker 环境与主机环境有何不同,导致需要这些非默认设置?它们也可以在标准 Ubuntu 18.04 环境中工作,但不能在 docker 中工作。我希望我们可以重新配置我们的 docker 映像,以便首先不需要这些非标准参数。
Postgres 版本:PostgreSQL 13.4 (Ubuntu 13.4-1.pgdg20.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit
psycopg2版本:2.8.5
主机操作系统:Windows 10
Docker 镜像操作系统:Ubuntu 18:04
您可能正在使用 Docker 覆盖网络功能(或用于负载均衡服务的入口网络),它基于 Linux IP 虚拟服务器 (IPVS),又名 Linux 虚拟服务器。这对空闲 TCP 连接使用默认的 900 秒(15 分钟)超时。
请参阅: https: //github.com/moby/moby/issues/31208
默认的 Linux TCP Keep-Alive 设置仅在很晚之后才开始发送数据包(如果启用的话),因此您可以选择:
| 归档时间: |
|
| 查看次数: |
4717 次 |
| 最近记录: |