Mongodb docker compose mongo需要对所有

Mongodb docker compose mongo需要对所有,mongodb,docker,docker-compose,file-permissions,Mongodb,Docker,Docker Compose,File Permissions,映像有这个很好的装载选项来初始化数据库。您可以挂载/initdb.d/,并将执行*.js 但是,我的项目文件和目录分别是600和700,属于redsandro:redsandro。mongo图像无法读取它们 我是否添加组read+execute(dir)(即640和750)并不重要。只有当我为文件中的所有内容添加读取权限,并为目录中的所有内容添加读取+执行权限时(即644和755,我们称之为“计划C”),mongo映像才会执行脚本 有没有一种方法可以让我的文件在我的机器上保持私有(例如,allA

映像有这个很好的装载选项来初始化数据库。您可以挂载
/initdb.d/
,并将执行
*.js

但是,我的项目文件和目录分别是
600
700
,属于
redsandro:redsandro
。mongo图像无法读取它们

我是否添加组read+execute(dir)(即
640
750
)并不重要。只有当我为文件中的所有内容添加读取权限,并为目录中的所有内容添加读取+执行权限时(即
644
755
,我们称之为“计划C”),mongo映像才会执行脚本

有没有一种方法可以让我的文件在我的机器上保持私有(例如,
all
AKA
umask 007
)并且仍然让mongo映像读取它们

更新:我想用docker compose选项、变量、环境等来实现这一点,而不是构建自定义图像。例如,一些具有类似问题的图像允许我简单地设置
user:1000
(uid用于本地用户)。这不适用于mongo映像。

您可以使用文件而不是挂载目录。例如,您的Dockerfile可以是这样的:

FROM mongo

COPY --chown=mongodb:mongodb /host/path/to/scripts/* /docker-entrypoint-initdb.d/

这意味着每次更改脚本时,您都需要重建映像,而不仅仅是重新创建容器。它是基础图像顶部的一个很小的层,因此构建图像应该不会花费太多时间。

你经常更改这些文件吗?@AlexBlex当我处理它们时,我一天更改几十次。然后他们一个多月都没动过。投票结果是一致的,但我知道这个选择。我们将此方案称为B方案。唯一的其他选择是使用文件ACL,但它仍然需要自定义映像,因为它未安装在基本mongo映像中。如果你每小时更改文件十几次,这比复制要好。在你的情况下,这不值得麻烦,所以可能是C计划。