如何为JanusGraph Docker镜像配置Gremlin Server序列化器?
如何为JanusGraph Docker镜像设置序列化器
问题背景
我当前的docker-compose.yml配置如下:
janusgraph-service: container_name: janusgraph build: . restart: always environment: - JANUS_PROPS_TEMPLATE=cql-es - gremlinserver.graphs.ConfigurationManagementGraph=/opt/janusgraph/conf/janusgraph-cql-configurationgraph.properties - gremlinserver.graphManager=org.janusgraph.graphdb.management.JanusGraphManager - janusgraph.graph.replace-instance-if-exists=true depends_on: - cassandra-service - elasticsearch-service ports: - 8182:8182
我尝试通过环境变量添加序列化器:
gremlinserver.serializers[+]={ className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
但这导致YAML格式无效。我也尝试用yq修改配置文件,但不知道如何正确写入嵌套映射:
yq w -P -i janusgraph-server.yaml serializers[+] { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
我需要将janusgraph-server.yaml配置成如下预期格式:
host: 0.0.0.0 port: 8182 evaluationTimeout: 30000 channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer graphs: graph: /etc/opt/janusgraph/janusgraph.properties scriptEngines: gremlin-groovy: plugins: org.janusgraph.graphdb.tinkerpop.plugin.JanusGraphGremlinPlugin: {} org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {} org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin: {} org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: classImports: - java.lang.Math methodImports: - java.lang.Math#* org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: files: - scripts/empty-sample.groovy serializers: - className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0 config: ioRegistries: - org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry processors: - className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor config: sessionTimeout: 28800000 - className: org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor config: cacheExpirationTime: 600000 cacheMaxSize: 1000 metrics: consoleReporter: enabled: false interval: 180000 csvReporter: enabled: true interval: 180000 fileName: /tmp/gremlin-server-metrics.csv jmxReporter: enabled: true slf4jReporter: enabled: true interval: 180000 graphiteReporter: enabled: false interval: 180000 maxInitialLineLength: 4096 maxHeaderSize: 8192 maxChunkSize: 8192 maxContentLength: 65536 maxAccumulationBufferComponents: 1024 resultIterationBatchSize: 64 writeBufferLowWaterMark: 32768 writeBufferHighWaterMark: 65536
解决方法
方法一:通过Dockerfile使用yq分步修改默认配置
JanusGraph Docker镜像会自动生成默认的janusgraph-server.yaml配置,你可以在Dockerfile中使用yq分步添加序列化器配置,避免直接传入复杂映射的格式问题:
- 在项目根目录创建
Dockerfile:
FROM janusgraph/janusgraph:latest # 分步添加序列化器配置 RUN yq w -i /etc/opt/janusgraph/janusgraph-server.yaml serializers[+] {} \ && yq w -i /etc/opt/janusgraph/janusgraph-server.yaml serializers[-1].className org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0 \ && yq w -i /etc/opt/janusgraph/janusgraph-server.yaml serializers[-1].config.ioRegistries[+] org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry
- 保持原
docker-compose.yml的build: .配置,执行docker-compose up --build重新构建镜像即可。
方法二:自定义配置文件并挂载到容器
直接创建符合预期的janusgraph-server.yaml文件,通过Docker卷挂载覆盖容器内的默认配置:
在项目根目录创建
janusgraph-server.yaml文件,内容为你提供的预期配置。修改
docker-compose.yml,添加volumes挂载配置:
janusgraph-service: container_name: janusgraph build: . restart: always environment: - JANUS_PROPS_TEMPLATE=cql-es - gremlinserver.graphs.ConfigurationManagementGraph=/opt/janusgraph/conf/janusgraph-cql-configurationgraph.properties - gremlinserver.graphManager=org.janusgraph.graphdb.management.JanusGraphManager - janusgraph.graph.replace-instance-if-exists=true depends_on: - cassandra-service - elasticsearch-service ports: - 8182:8182 volumes: - ./janusgraph-server.yaml:/etc/opt/janusgraph/janusgraph-server.yaml # 挂载自定义配置文件
- 执行
docker-compose up启动容器,容器会直接使用你自定义的配置文件。
内容的提问来源于stack exchange,提问作者毛三王
相关产品推荐
相关产品推荐

