问题描述
我对以下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用户。
解决方法
我可以想到两个选择,
-
以有效的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
- (hacky?),但是您可以在docker外部或可以访问备份卷的进程中的其他容器中运行neo4j-admin? (听说您要以root用户身份运行它?)
但是,当然,我想知道为什么备份进程或数据库备份将由root拥有(而不是由db owner或备份帐户拥有...)我个人认为最好避免使用root帐户,只要可能。
,我最终通过按要求(_apt
以docker-compose run graph_dev
运行命令并使用docker exec -it -u neo4j:neo4j graph_dev /bin/bash
将文件复制到备份目录来解决了这个问题。不优雅,但可以。