0

我已经使用 docker 映像在本地设置了 NuoDB。它工作正常,我可以访问数据库控制台并通过访问http://localhost:8888/explorer.jsp. 但是当我尝试使用 JDBC 连接到数据库时出现错误:

与 NuoDB 的连接失败。[08S01] 无法连接到任何主机 [localhost]。错误是 [java.io.IOException: Operation time out (Connection time out), /172.17.0.3:48006]

据我了解,我已成功连接到 NuoDB 代理localhost:48004。并且在经纪人将我扔到数据库节点地址之后172.17.0.3:48006,由于官方文档172.17.0.3中描述的限制,正在运行的 docker 容器的 IP 是无法从主机访问的。

我的问题是如何连接到数据库?有什么解决方法吗?

这是我的环境:
Docker 版本 17.03.1-ce,构建 c6d412e
我通过命令运行容器:
docker run -d --privileged=true -p 48004:48004 -p 48005:48005 -p 48006:48006 -p 9001:9001 -p 8888:8888 nuodb-test.
Dockerfile 和 NuoDB 设置可以在我的github repo中找到。

提前致谢。

4

1 回答 1

1

我弄清楚了这个问题。接下来是解决方案。

1) 设置Docker 工具箱。它带有VirtualBox VM,您将能够使用 VM ip 地址连接到 DB。

下面描述了一组在Docker Toolbox下运行 NuoDB 的命令。
2) 运行eval $(docker-machine env default)以切换到 Docker Toolbox。
切换回 Docker for MacOS 运行 unset ${!DOCKER_*}.

3) 使用选项启动容器--network=host -e BROKER_ALT_ADDR=$(docker-machine ip)
在我的情况下,完整的命令是:
docker run -d --privileged=true --network=host -e BROKER_ALT_ADDR=$(docker-machine ip) -p 48004:48004 -p 48005:48005 -p 48006:48006 -p 9001:9001 -p 8888:8888 nuodb-test

4) 使用docker-machine ip命令获取您的默认 docker 机器 IP 地址。现在您可以通过此 ip 连接。JDBC 连接字符串示例:docker 机器 IP 地址 jdbc:com.nuodb://192.168.99.100/test在哪里。192.168.99.100

您还可以通过 IP 连接到数据库管理中心http://192.168.99.100:8888/

有关更多信息,请阅读文档

于 2017-05-08T17:00:45.703 回答