docker - 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
存在于主机上并具有必要的权限。为什么不使用我提供的内容并且由于权限而失败?
解决方案
总结: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
推荐阅读
- object - “Gameobject”类型的对象已被销毁
- python - 如何通过pandas groupby数量和单价计算总金额
- python - 使用 asyncio 的 python 子进程的“关闭”事件侦听器
- python - 对于数字列表,查找累积和保持在范围内的所有组合
- javascript - angularjs控制器中的window.addEventListener导致调用两次或更多次
- haskell - 为什么 Haskell 中默认不启用某些语法语言扩展?
- rundeck - 动态选项和 rd-cli
- javascript - 如何从变量中创建具有键名的对象
- symfony - 致命错误:方法 class@anonymous::__toString() 在作曲家安装后不得抛出异常
- python - 拥有一个每个进程管理一个 ThreadPoolExecutor 的 multiprocessing.Pool 有什么好处吗?