首页 > 解决方案 > Docker不断创建具有root权限的文件夹

问题描述

我有以下用于 zookeeper 的 Dockerfile

FROM zookeeper:3.7.0

ARG appuser
RUN useradd -ms /bin/bash $appuser
RUN chown -R $appuser/conf /data /logs /datalog
USER $appuser

我在其中指定我自己的用户docker build -t my/zookeeper:3.7.0 --build-arg appuser=myuser .

但是,当我使用命令运行它时

docker run -u myuser -v /Products/zookeeper:/data my/zookeeper:3.7.0

它失败了/docker-entrypoint.sh: line 47: /data/myid: Permission denied,我看到它可能正在尝试创建文件夹,root如下所示:

drwxr-xr-x 2 root root 6 Jun 21 17:25 zookeeper

myuser存在于主机上并具有必要的权限。为什么不使用我提供的内容并且由于权限而失败?

标签: docker

解决方案


总结:zookeper 映像已经能够通过使用 docker run 的本机--user参数对其正在创建的目录应用正确的权限。

重要的是要知道,如果您提供用户名,则该用户必须已经存在于图像中。但是,指定用户 ID 和/或组 ID 可以按预期工作。

Zookeper 使用 gosu调整其entrypoint中的目录所有权。

这是一个示例,如何运行映像(在 linux 上),同时为当前用户提供它正在创建的目录的目录所有权:

docker run --user $(id -u):$(id -g) -v /Products/zookeeper:/data my/zookeeper:3.7.0


推荐阅读