【问题标题】:Can't connect to a docker container with Janusgraph (Berkeleyje/Lucern) from docker container with gremlin console无法从带有 gremlin 控制台的 docker 容器连接到带有 Janusgraph(Berkeleyje/Lucern)的 docker 容器
【发布时间】:2020-02-02 14:34:48
【问题描述】:

目标:我想建立一个图形数据库,并最终从 Nodejs 应用程序中内置的一组静态遍历中访问数据

中间目标 1: 作为学习练习,我最初将在本地机器上的 docker 容器中使用 gremlin-console,而不是使用 Nodejs 应用程序。 - 我正在使用 docker 容器tinkerpop/gremlin-console:latest

中间目标 2: 在我组织的远程服务器上的虚拟机上的 docker 容器中运行 Janusgraph (Berkeleyje/Lucern/gremlin-server)(我不想要任何模糊的建议) - 我正在使用 docker 容器 janusgraph/janusgraph:latest v3.4.4

修订中级目标 2: 由于我在连接时遇到的问题,请在我的本地机器上的 docker 容器中运行 Janusgraph (Berkeleyje/Lucern/gremlin-server),与运行 gremlin-console 的 docker 容器


步骤:

  1. 我用docker pull janusgraph/janusgraph:latest拉取了服务器docker镜像
  2. 我使用 docker run -it -p 8182:8182 janusgraph/janusgraph:latest /bin/bash(也使用 imageID)运行图像
  3. 从正在运行的容器中的控制台/opt/janusgraph/bin/gremlin-server.sh

返回:(剪断)

3321 [main] WARN  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - The org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0 serialization class is deprecated.
3370 [main] INFO  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - Configured application/vnd.gremlin-v3.0+gryo with org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0
3370 [main] WARN  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - The org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0 serialization class is deprecated.
3371 [main] INFO  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - Configured application/vnd.gremlin-v3.0+gryo-stringd with org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0
3395 [main] INFO  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - Configured application/vnd.gremlin-v3.0+json with org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0
3395 [main] INFO  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - Configured application/json with org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0
3397 [main] WARN  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - The org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0 serialization class is deprecated.
3398 [main] INFO  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - Configured application/vnd.gremlin-v1.0+gryo with org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0
3400 [main] WARN  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - The org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0 serialization class is deprecated.
3400 [main] INFO  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - Configured application/vnd.gremlin-v1.0+gryo-lite with org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0
3400 [main] WARN  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - The org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0 serialization class is deprecated.
3401 [main] INFO  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - Configured application/vnd.gremlin-v1.0+gryo-stringd with org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0
3401 [main] WARN  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - The org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0 serialization class is deprecated.
3405 [main] INFO  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - Configured application/vnd.gremlin-v2.0+json with org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0
3405 [main] INFO  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - application/json already has org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0 configured - it will not be replaced by org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, change order of serialization configuration if this is not desired.
3410 [main] INFO  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - Configured application/vnd.gremlin-v1.0+json with org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0
3411 [main] INFO  org.apache.tinkerpop.gremlin.server.AbstractChannelizer  - application/json already has org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0 configured - it will not be replaced by org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, change order of serialization configuration if this is not desired.
3458 [gremlin-server-boss-1] INFO  org.apache.tinkerpop.gremlin.server.GremlinServer  - Gremlin Server configured with worker thread pool of 1, gremlin pool of 8 and boss thread pool of 1.
3458 [gremlin-server-boss-1] INFO  org.apache.tinkerpop.gremlin.server.GremlinServer  - Channel started at port 8182.

我希望序列化类警告不重要

  1. 我用docker pull tinkerpop/gremlin-console:latest拉取了控制台docker镜像
  2. 我使用 docker run -it -p 8182:8182 tinkerpop/gremlin-console:latest /bin/bash(也使用 imageID)运行图像
  3. (在非托管版本中,我将/opt/gremlin-console/conf/remote.yaml 调整为指向服务器主机名的host - 可从容器解析为其IP)
hosts: [localhost] # OR [ the remote hostname ] as per the two versions of goal 2
port: 8182
serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }}

  1. 从正在运行的容器中的控制台/opt/janusgraph/bin/gremlin.sh
  2. 从返回的 gremlin 控制台 remote connect tinkerpop.server conf/remote.yaml
gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Configured localhost/127.0.0.1:8182
  1. 从 gremlin 控制台 :remote console(将所有后续命令切换到远程 gremlin-server)

问题 似乎控制台正在连接到服务器但是当我运行时 gremlin> :> graph = TinkerGraph.open(conf/gremlin-server/conf/gremlin-server/janusgraph-berkeleyje-server.properties) 回复了 Host did not respond in a timely fashion - check the server status and submit again. 无论我是尝试连接同地还是远程的 gremlin-server,这都是一样的

现在该怎么办?去哪里看?为什么 Gremlin 这么难!

元问题 我不清楚(并且文档没有解释):> TinkerGraph.open(server.properties) 是否需要控制台本地的服务器 .properties 文件的路径,或者(我认为更有可能)相对于远程服务器的路径

我希望文档少一些理所当然,并且(因为一定数量有限的架构模式*)全面地单独解释了所有需要的内容

*

  • 服务器和客户端位于同一台机器上,共享资源/网络等。
  • 服务器和客户端容器化在一台机器上,那么如何让它们对话(通过容器隔离)
  • 远程机器上的服务器到客户端(有和没有容器化)

【问题讨论】:

  • 忘了说运行graph = TinkerGraph.open(conf/gremlin-server/conf/gremlin-server/janusgraph-berkeleyje-server.properties)在服务器端没有响应,让我怀疑之前:remote connect tinkerpop.server conf/remote.yaml命令的成功响应

标签: docker janusgraph gremlin-server


【解决方案1】:

这是一个适合我的快速版本:

docker run --name janusgraph-default \
    -e janusgraph.storage.berkeleyje.cache-percentage=80 \
    -e gremlinserver.threadPoolWorker=2 \
    -e gremlinserver.channelizer=org.apache.tinkerpop.gremlin.server.channel.WsAndHttpChannelizer \
    -p 8182:8182 \
    janusgraph/janusgraph:latest

我这里自定义了channelizer,如果你只想要websocket而不想要Http,可以避免。

在 gremlin 控制台中:

:remote connect tinkerpop.server conf/remote.yaml
:remote console
graph
==>standardjanusgraph[berkeleyje:/var/lib/janusgraph/data]
  • 确保 remote.yaml 指向 localhost:8182(来自 docker run 命令的端口)
  • 第二行remote console只是为了避免每个命令都使用:>

我相信服务器会在其相对路径中查找属性文件。 docker 版本将属性文件复制到/etc/opt/,如下所述:https://github.com/JanusGraph/janusgraph-docker

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 2020-02-29
    • 2020-02-08
    • 2020-01-30
    • 2021-04-04
    • 2020-11-20
    相关资源
    最近更新 更多