无法连接到 docker 上的 firebird 服务器

Can't connect to a firebird server on docker

我是 macOS 用户,我在使用 firebird 创建数据库时遇到了奇怪的错误。我看到有一些带有 firebird 的码头容器 运行 很好(我能够创建数据库、执行查询等等)但是当我尝试从我的本地 ISQL 或 razorSQL 客户端连接时(通过 JDBC),我得到一些奇怪的错误,如 "unavailable database" 或 "can't open file"

我也不确定 ISQL CONNECT 字符串是如何工作的,因为我看到的每个站点都不一样。

我得到这张 docker 图片:( https://hub.docker.com/r/jacobalberty/firebird/)

我是这样创建我的容器的:

docker run -d --name firebird -p 3050:3050 -v /data/firebird/databases:/databases jacobalberty/firebird:2.5-ss

我的docker-机器IP是:

192.168.99.100

我试过这样连接:

CONNECT '0.0.0.0:3050://databases/test.fdb' user 'SYSDBA' password 'masterkey';
unavailable database

还有这样的:

CONNECT '192.168.99.100:/databases/test.fdb' user 'SYSDBA' password 'masterkey';
connection rejected by remote interface


CONNECT '192.168.99.100:3050:/databases/test.fdb' user 'SYSDBA' password 'masterkey';
 Statement failed, SQLSTATE = 08001
 unavailable database

当我进入 docker 容器时,文件在那里:

root@e4212b9f9d16:/databases# pwd
/databases
root@e4212b9f9d16:/databases# ls
test.fdb

此外,我不确定如何检查 firebird 服务器是否 运行ning(我想这是因为我可以 'connect' 到容器内的数据库'..但是docker 容器最终启动并且 运行ning - 在 ip 和端口上成功完成了 telnet)

我也尝试使用容器 IP (172.17.0.2),但超时了

我最熟悉 mysql 和 SQLite 以前从未接触过 firebird 数据库,当用户获得这个数据库时,我必须模拟它,使用假数据开发一个应用程序,然后将它连接到真正的 firebird (因此无法更改数据库)

为了查明服务器是否为运行,使用:

docker ps

为了弄清楚服务器是否真的启动了,或者在启动时出错了,在没有 -d 的情况下启动容器并在它运行时查看日志消息:

docker run --name firebird -p 3050:3050 -v /data/firebird/databases:/databases jacobalberty/firebird:2.5-ss

你的大部分问题是你的连接字符串,它应该是 <host>/<port>:<database-path-or-alias>,其中离开 /<port> 将默认到端口 3050。

这解决了除

之外的所有问题
CONNECT '192.168.99.100:/databases/test.fdb' user 'SYSDBA' password 'masterkey';
connection rejected by remote interface

因为该连接字符串是有效的。

此错误意味着您可以连接到服务器,但连接被拒绝了。这可能 - 例如 - 当您使用 Firebird 3,但使用 Firebird 2.5 ISQL/fbclient 库连接,并且没有放宽 Firebird 3 的安全设置时发生(请参阅 Firebird 3 发行说明中的​​ Legacy Authentication ).

因此,关于 'create your firebird server' 的标准文档没有提及,但您在 firebird.conf 上,变量 RemoteBindAddress 必须为空

文件:

/etc/firebird/2.5/firebird.conf

行已更改:

RemoteBindAddress =
#RemoteBindAddress = localhost

感谢所有