Python连接到Firebird Docker数据库。

3
我有一个名为 mydb.fdb 的文件,我该如何将它加载到 Docker 容器中,并从 Python 中连接到它。我在 docker-compose 文件中按照以下方式进行操作:
version: '2'

services:
  firebird:
    image: jacobalberty/firebird
    environment:
      ISC_PASSWORD: pass
    volumes:
      - ./database:/databases

然后我执行:
docker exec -it <container-id> bin/bash

我看到我的.fdb文件在容器的/databases文件夹中,但当我在容器内执行命令时:

cd /usr/local/firebird/bin
./isql
SQL> CONNECT "/databases/mydb.FDB" user sysdba password masterkey;

我收到了以下信息:

服务器配置不允许在 /databases/mydb.FDB 路径下使用数据库

此外,我不知道如何通过 fdb Python 模块 连接到该数据库。我已经尝试了以下方法:
import fdb

con = fdb.connect(
    host='0.0.0.0',
    port='3050', 
    database='mydb.FDB',
    user='sysdba', 
    password='masterkey')

并且收到:

raise Exception("无法确定Firebird客户端库的位置。")


服务器配置不允许 // FB认为这个文件夹不是本地的,而是一个网络共享的文件夹,或者更可能的是您需要编辑firebird.conf文件,并将该文件夹列入启用数据库的列表中 // host='0.0.0.0'难道不应该是localhost AKA 127.0.0.1吗?“Python模块”和“Firebird Docker”是在同一台计算机上还是在不同的计算机上? - Arioch 'The
1个回答

3

您的问题包含两个不同的问题,请在以后确保将它们作为单独的问题提出。

关于您的第一个问题,Firebird docker镜像默认期望数据库位于 /firebird/data 目录下,并且明确配置了Firebird只能访问此目录。如果您想使用不同的位置,则必须设置环境变量 DBPATH 为正确的路径。也请参阅 issue 12Dockerfilebuild.sh。这个选项似乎没有记录; 我已在该票上留下评论。

至于您的第二个问题,它有两个部分。首先,您不能使用0.0.0.0进行连接,它只是“此主机的所有IP地址”的简写,只能用于监听连接,而不能用于连接。从运行docker的计算机上连接时,需要使用127.0.0.1或localhost。

除此之外,错误提示表明您未安装Firebird本机客户端。FDB驱动程序需要 fbclient.dll(Windows)或 libfbclients.so(Linux)。您需要安装Firebird本机客户端,或者切换到 pyfirebirdsql,它是用纯Python编写的Firebird驱动程序(它在Python中实现了Firebird协议)。


那么,如果我不想在本地安装 libfbclients.so,我需要在 Docker 容器中运行 Python 脚本吗? - Arti
@Arti我不会这样做,相反我建议改用pyfirebirdsql。 - Mark Rotteveel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接