如何在docker容器文件夹中授予文件夹权限

Posted

技术标签:

【中文标题】如何在docker容器文件夹中授予文件夹权限【英文标题】:How to give folder permissions inside a docker container Folder 【发布时间】:2018-02-08 21:18:29 【问题描述】:

我正在我的 Dockerfile 中创建一个文件夹,我想给它一个写权限。但是当我尝试这样做时出现权限被拒绝错误

FROM python:2.7
RUN pip install Flask==0.11.1 
RUN useradd -ms /bin/bash admin
USER admin
COPY app /app
WORKDIR /app
RUN chmod 777 /app
CMD ["python", "app.py"] 

我的错误是

PS C:\Users\Shivanand\Documents\Notes\Praneeth's work\Flask> docker build -t 
shivanand3939/test .
Sending build context to Docker daemon  209.9kB
Step 1/8 : FROM python:2.7
---> 8a90a66b719a
Step 2/8 : RUN pip install Flask==0.11.1
---> Using cache
---> 6dc114bd7cf1
Step 3/8 : RUN useradd -ms /bin/bash admin
---> Using cache
---> 1cfdb6eea7dc
Step 4/8 : USER admin
---> Using cache
---> 27c5e8b09f15
Step 5/8 : COPY app /app
---> Using cache
---> 5d628573b24f
Step 6/8 : WORKDIR /app
---> Using cache
---> 351e19a5a007
Step 7/8 : RUN chmod 777 /app
---> Running in aaad3c79e0f4
**chmod: changing permissions of ‘/app’: Operation not permitted
The command '/bin/sh -c chmod 777 /app' returned a non-zero code: 1**

如何给我的 Docker 容器内的 app 文件夹写权限

【问题讨论】:

问题是ADD/COPYUSER 之后没有使用新的用户ID 作为添加到容器中的文件的所有者——即使这是知情用户所期望的。使用 --chown 如此-random-dude 建议,如果 Docker 开发人员知道他们在做什么,就不应该需要修复。 【参考方案1】:

我猜您正在切换到用户“admin”,该用户无权更改 /app 目录的权限。使用“root”用户更改所有权。下面的 Dockerfile 对我有用 -

FROM python:2.7
RUN pip install Flask==0.11.1 
RUN useradd -ms /bin/bash admin
COPY app /app
WORKDIR /app
RUN chown -R admin:admin /app
RUN chmod 755 /app
USER admin
CMD ["python", "app.py"] 

PS - 尝试摆脱“777”权限。我暂时尝试在上面的 Dockerfile 中进行操作。

【讨论】:

Docker 镜像使用不同的 Linux 发行版。有些Linux 没有命令useradd。就我而言,我必须使用 adduser 才能使其工作。 这个解决方案是 w.r.t docker image python:2.7 它有 useradd 二进制文件。无论如何,我很高兴这个答案在某种程度上帮助了你。 我认为这不适用于非特权图像。实际上它返回Operation not permitted docker container create -v /home/python:/app 没有权限/app,【参考方案2】:

正如其他用户已经指出的那样,将USER admin 移到后面的步骤

FROM python:2.7
RUN pip install Flask==0.11.1 
RUN useradd -ms /bin/bash admin
COPY --chown=admin:admin app /app
WORKDIR /app
USER admin
CMD ["python", "app.py"] 

对于release v17.09.0-ce 和更新的版本,您可以将可选标志--chown=<user>:<group>ADDCOPY 命令一起使用。

例如

COPY --chown=<user>:<group> <hostPath> <containerPath>

--chown 标志的文档记录在 Dockerfile Reference page。

【讨论】:

以上是关于如何在docker容器文件夹中授予文件夹权限的主要内容,如果未能解决你的问题,请参考以下文章

已安装Docker并尝试使用权限拒绝消息创建新文件

如何在c#中授予文件夹权限?

使用Docker部署GitLab

在 Windows 主机上的 docker 容器内更改挂载文件夹中的文件权限

如何在 C 中授予完整文件权限

如何在 Elastic Beanstalk 上为特定容器设置文件夹权限