【问题标题】:Connect to Postgres running on docker with pyodbc使用 pyodbc 连接到在 docker 上运行的 Postgres
【发布时间】:2019-08-15 05:43:31
【问题描述】:

尝试连接到 docker 内的 Postgres 数据库但遇到以下问题:

文件“”,第 1 行,在 pyodbc.OperationalError: ('08001', '[08001] 无法连接到服务器:没有这样的文件或目录\n\tIs 服务器在本地运行并接受 Unix 域上的\n\t连接 套接字 "/tmp/.s.PGSQL.5432"?\n (101) (SQLDriverConnect)')

正在通过以下方式建立连接:

conn_str = ("DRIVER=/usr/local/lib/psqlodbcw.so;""DATABASE=mytestdb;""UID=postgres;""PWD=mysecretpassword""SERVER=localhost;""PORT=5432;");

conn = pyodbc.connect(conn_str)

【问题讨论】:

  • 尝试连接到 docker 内部的 Postgres 数据库 尝试在 docker 实例内部或主机操作系统上连接的应用程序是什么?此外,在您的连接字符串上显示 localhost (SERVER=localhost),您可能希望查看 docker 实例的 ip,否则设置 a NAT for the docker..
  • 谢谢,我刚刚检查了容器 IP 是 172.17.0.2 并在代码上更改了它,但仍然遇到同样的问题。
  • 主机是否与该 IP 具有相同的子网地址?像 172.17.0.1 这样的东西?如果你有 pgAdmin,你可能想先连接它。也只是一个旁注,你有任何第三方防病毒或防火墙吗?这也可能是您的主机无法与 docker 实例通信的原因。

标签: python postgresql docker pyodbc


【解决方案1】:

确保在您的 docker 容器上公开端口 5432,否则您将无法连接。这些信息可以清除您的想法。 https://medium.com/@lvthillo/connect-from-local-machine-to-postgresql-docker-container-f785f00461a7

在你的 docker-compose.yml 上把它改成这样:

db:
image: postgres
ports:
  - 5432:5432

如果你的本地机器上已经有 pg,它可以是 5432 或 5435。

【讨论】:

  • 我遵循了这些步骤(使用该帖子作为参考)。我还将 SERVER 更改为 SERVER=172.17.0.2 因为那是容器 IP,但我仍然遇到同样的错误。
  • 您需要更改配置以允许远程地址连接。是你做的吗?也不要使用 IP,只需使用 db 或图像名称。
【解决方案2】:

您的应用程序正在尝试通过主机 /tmp/ 文件夹中的 unix 套接字文件连接 postgres。

所以在 posgres docker-compose 文件中配置 docker 容器的挂载点如下:

volumes:
      - /tmp:/var/lib/postgresql

然后再次重建 postgres 容器。

【讨论】:

    猜你喜欢
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 2015-02-12
    相关资源
    最近更新 更多