Python连接到Firebird Docker数据库

时间:2018-08-01 13:01:39

标签: python docker firebird

我有一个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 module连接到该数据库。我这样做:

import fdb

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

并收到:

  

raise Exception(“ Firebird客户端库的位置不能为   确定。”

1 个答案:

答案 0 :(得分:2)

您的问题中有两个不同的问题,将来,请确保将其作为单独的问题进行询问。

关于您的第一个问题,默认情况下,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协议)。