【问题标题】:Connection refused when trying to create graph in JanusGraph-Docker尝试在 JanusGraph-Docker 中创建图形时连接被拒绝
【发布时间】:2020-01-26 17:55:17
【问题描述】:

我正在使用 JanusGraph-Docker 映像 (https://github.com/JanusGraph/janusgraph-docker) 在 Docker 中设置 JanusGraph。当我在没有 docker 的情况下使用 JanusGraph 时,一切正常,但现在我遇到了一些问题:

我使用以下命令来设置 janusgraph 与 Cassandra+Elasticsearch:

docker-compose -f docker-compose-cql-es.yml up

这将启动所有必需的容器,我仔细检查了这些容器:

docker ps

现在我想通过 Gremlin 控制台连接到 Janusgraph:

docker-compose -f docker-compose-cql-es.yml run --rm -e GREMLIN_REMOTE_HOSTS=janusgraph janusgraph ./bin/gremlin.sh

这会启动 gremlin 控制台,然后我将远程配置为:

:remote connect tinkerpop.server conf/remote.yaml
:remote console

这也很好用。之后,我尝试创建一个新图表,但失败:

graph = JanusGraphFactory.open('conf/janusgraph-cassandra-es.properties')

这给了我以下信息:

连接被拒绝(连接被拒绝)

全栈跟踪:

java.net.ConnectException:连接被拒绝(连接被拒绝) 在 java.net.PlainSocketImpl.socketConnect(本机方法) 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 在 java.net.Socket.connect(Socket.java:589) 在 org.apache.thrift.transport.TSocket.open(TSocket.java:182) 在 org.apache.thrift.transport.TFramedTransport.open(TFramedTransport.java:81) 在 org.janusgraph.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeRawConnection(CTConnectionFactory.java:110) 在 org.janusgraph.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeObject(CTConnectionFactory.java:74) 在 org.janusgraph.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeObject(CTConnectionFactory.java:43) 在 org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:1220) 在 org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.getCassandraPartitioner(CassandraThriftStoreManager.java:215) 在 org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.(CassandraThriftStoreManager.java:197) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:58) 在 org.janusgraph.diskstorage.Backend.getImplementationClass(Backend.java:440) 在 org.janusgraph.diskstorage.Backend.getStorageManager(Backend.java:411) 在 org.janusgraph.graphdb.configuration.builder.GraphDatabaseConfigurationBuilder.build(GraphDatabaseConfigurationBuilder.java:50) 在 org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:161) 在 org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:132) 在 org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:79) 在 org.janusgraph.core.JanusGraphFactory$open.call(未知来源) 在 Script4.run(Script4.groovy:1) 在 org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:674) 在 org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:376) 在 javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233) 在 org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$0(GremlinExecutor.java:266) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748)

我可以运行如下查询,因为 janusgraph 服务器似乎预先部署了一个带有遍历对象的图:

g.addV('user').property('username','exampleUserName')

但是当我尝试从 python gremlin 连接时:

graph = Graph()
g = graph.traversal().withRemote(DriverRemoteConnection('ws://0.0.0.0:8182/gremlin','g'))

我遇到同样的错误,有什么帮助吗?

【问题讨论】:

  • 你真的指定0.0.0.0作为gremlin-python中主机的IP吗?它当然应该是可以访问 JanusGraph 容器的 IP 地址。
  • 如果我检查我的容器正在运行哪些 IP 和端口,它会说 janusgraph 容器正在 gremlin-python 中的 0.0.0.0:8182->8182/tcp 上运行,在 DriverRemoteConnection 中指定像 ws://0.0.0.0:8182/gremlin 这样的 IP 应该是够了吧?
  • 你有没有设法解决这个问题?我遇到了同样的问题,发现原因是服务器无法连接到elasticsearch服务。问题是我不知道如何解决这个问题。

标签: docker elasticsearch cassandra gremlin janusgraph


【解决方案1】:

请注意,当您的服务器侦听0.0.0.0 时,这意味着它可以从运行它的机器以外的机器访问。侦听127.0.0.1 的替代方法意味着它只能从与服务器运行的同一主机上的进程访问。

但是,当您的客户端连接到服务器时,它必须指定它所连接的实际主机名或 IP 地址,可以是 localhost127.0.0.1 或任何 IP服务器连接到网络上的地址。但是,您不能在从客户端到服务器的连接字符串中使用0.0.0.0,因为这不是一个有效的连接 IP 地址。

【讨论】:

  • 我之前用 localhost 尝试过,得到相同的结果。由于服务器实际上在同一台机器上运行,这应该可以工作。请注意,我可以在 localhost:8182 上成功 telnet
猜你喜欢
  • 2021-11-16
  • 2019-10-20
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多