Docker中实现Neo4j与Fake Graph服务目录实时共享问题
解决方案
要让Neo4j的/import目录实时获取fake-graph服务生成的CSV文件,核心是让两个服务共享同一个存储卷,确保文件生成后能立即被Neo4j访问。以下是具体调整方案:
修正后的docker-compose配置
version: "3.8" services: # Neo4j数据库配置 neo4j: container_name: neo4j_social_seed_db image: neo4j:5.15.0-enterprise ports: - "7474:7474" - "7687:7687" restart: always environment: - NEO4J_AUTH=neo4j/neo4jSocial - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes - NEO4J_server.memory.pagecache.size=1G - NEO4J_server.directories.import=import volumes: - ./neo4j/data:/data - ./neo4j/conf:/conf - ./neo4j/logs:/logs - ./neo4j/plugins:/plugins # 和fake-graph服务共用同一个共享存储卷 - shared-import:/import networks: - net # Java后端服务配置(无改动) social-seed-app: container_name: app_social_seed image: social-seed:0.0.1 build: context: ./backend ports: - "8081:8081" environment: - DATABASE_URI=bolt://neo4j:7687 - DATABASE_USERNAME=neo4j - DATABASE_PASSWORD=neo4jSocial depends_on: - neo4j networks: - net # Fake Graph生成服务配置 fake-graph: container_name: fake_graph_service image: python:3.11.2-slim build: context: ./fake_graph volumes: - ./fake_graph:/app # 将共享存储卷挂载到CSV生成的temp目录 - shared-import:/app/temp depends_on: - neo4j environment: - GENERATE_FAKE_GRAPH=true - DATABASE_URI=bolt://neo4j:7687 command: > sh -c "if [ '$GENERATE_FAKE_GRAPH' = 'true' ]; then python /app/generate.py; else sleep infinity; fi" networks: - net # 定义全局共享的named volume volumes: shared-import: networks: net:
关键调整说明
- 改用Docker Named Volume(
shared-import):由Docker统一管理存储,避免本地目录挂载带来的权限冲突、路径不匹配问题,能保证文件生成后实时同步到两个服务的对应目录。 - 对齐文件生成路径:确保Python脚本
generate.py把CSV文件写入到/app/temp目录,该目录已挂载共享卷,文件会自动同步到Neo4j的/import目录。 - 移除原错误挂载:删掉Neo4j配置中
./fake-graph/app/temp:/import的本地目录映射,避免依赖本地文件结构引发的同步失效。
额外验证与注意事项
- 同步验证:启动服务后,可进入fake-graph容器执行
touch /app/temp/test.csv,再进入Neo4j容器执行ls /import,检查是否能看到test.csv文件,确认同步生效。 - 权限兼容(若用本地目录替代named volume):如果选择用
./shared-import:/import和./shared-import:/app/temp的本地目录挂载方式,需先执行chmod 777 ./shared-import临时测试权限,生产环境建议设置更严格的用户组权限。
内容的提问来源于stack exchange,提问作者Xermiz
相关产品推荐
相关产品推荐

