首页 > 解决方案 > Python连接到firebird docker数据库

问题描述

我有一个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 客户端库的位置。")

标签: pythondockerfirebird

解决方案


您的问题中有两个不同的问题,将来,请确保将它们作为单独的问题提出。

至于您的第一个问题,默认情况下,Firebird docker 映像的设置需要位于 location 中的数据库/firebird/data,并明确配置 Firebird 以限制仅访问该位置。如果要使用不同的位置,则必须将环境变量设置DBPATH为正确的路径。另见issue 12Dockerfile和镜像的build.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 协议)。


推荐阅读