neo4j中的docker卷权限

问题描述

我对以下docker compose设置感到不安:

version: '2.4'

services:
  graph_dev:
    image: neo4j:3.5.14-enterprise
    container_name: amlgraph_dev
    user: 100:101
    ports:
      - 7474:7474
      - 7473:7473
      - 7687:7687

    volumes:
      - neo4jbackup:/backup
      - neo4jdata:/data

volumes:
  neo4jbackup:
  neo4jdata:

我想运行neo4j-admin命令,该命令必须以用户100(_apt)的身份运行。但是,我需要备份到neo4jbackup的卷已作为root挂载,并且_apt无法在其中写入。

如何创建_apt可以写入的卷?主机上不存在用户_apt:neo4j。在docker映像中没有root用户

解决方法

我可以想到两个选择,

  1. 以有效的LINUX用户和组身份运行neo4j docker容器,并授予该用户访问备份文件夹的权限。这是我的脚本的样子(当前我不使用compose),以在当前用户下在docker中运行neo4j

    docker run
    --user“ $(id -u):$(id -g)”

这里有一篇文章介绍如何用compose做同样的事情 https://medium.com/faun/set-current-host-user-for-docker-container-4e521cef9ffc

  1. (hacky?),但是您可以在docker外部或可以访问备份卷的进程中的其他容器中运行neo4j-admin? (听说您要以root用户身份运行它?)

但是,当然,我想知道为什么备份进程或数据库备份将由root拥有(而不是由db owner或备份帐户拥有...)我个人认为最好避免使用root帐户,只要可能。

,

我最终通过按要求(_aptdocker-compose run graph_dev运行命令并使用docker exec -it -u neo4j:neo4j graph_dev /bin/bash将文件复制到备份目录来解决了这个问题。不优雅,但可以。