我正在尝试使用 Gremlin 服务器来处理基于图形的数据库和 docker-compose。 问题是,当我关闭或重新启动容器时,没有保存静态文件,并且图形在以下启动时为空。
我做错了什么? :(
我所做的是:
为容器设置这个图像
image: tinkerpop/gremlin-server
设置容器体积
volumes:
- gremlin_data:/opt/gremlin-server/data
volumes:
pgdata:
django-static:
gremlin_data:
gremlin.tinkergraph.graphLocation=/opt/gremlin-server/data/graph.kryo
gremlin.tinkergraph.graphFormat=gryo
问题似乎是 gremlin-server 在 docker 中运行时没有正常关闭。 TinkerGraph 主要是一个内存中的图形,它仅在图形实例关闭时保存到
gremlin.tinkergraph.graphLocation
中定义的位置。当 gremlin-server 收到 SIGINT 时,它会关闭底层的 TinkerGraph 并保存数据。
问题是运行分布式gremlin-server docker镜像时,gremlin-server不是容器中的前台进程。当容器关闭时,服务器永远不会收到正常关闭的信号,并且不会发生此保存。
我已经测试了类似于您描述的设置;如果我只是关闭容器,我的图表就不会保存。但是,如果我在容器中打开一个 shell 并运行以下命令在关闭之前向服务器发送一个 SIGINT,我的数据将保留在我的卷中。
/opt/gremlin-server $ ps
PID USER TIME COMMAND
1 gremlin 0:00 {gremlin-server.} /bin/bash /opt/gremlin-server/bin/gremlin-server.sh conf/gremlin-server.yaml
22 gremlin 0:06 java -Dlogback.configurationFile=file:/opt/gremlin-server/conf/logback.xml -Xms512m -Xmx4096m -cp :/opt/gremlin-server/conf/:/opt/gremlin-server/lib
55 gremlin 0:00 /bin/sh
61 gremlin 0:00 ps
/opt/gremlin-server $ kill -INT 22 # PID of the java process (gremlin-server)
我相信这是应该在 TinkerPop 内部解决的问题。我为这样的改进创建了一个TinkerPop JIRA