无法创建目录。在 Docker 容器中拒绝权限

无法在非 root 用户添加到 sudoers 组的映像生成期间创建文件夹。下面是我的 Dockerfile:

FROM ubuntu:16.04


RUN apt-get update && \
apt-get -y install sudo


RUN adduser --disabled-password --gecos '' newuser \
&& adduser newuser sudo \
&& echo '%sudo ALL=(ALL:ALL) ALL' >> /etc/sudoers


USER newuser


RUN mkdir -p /newfolder
WORKDIR /newfolder

我得到错误: mkdir: cannot create directory '/newfolder': Permission denied

183674 次浏览

Docker 容器内的文件系统的工作方式与 Docker 容器外的文件系统类似: 如果要创建文件或目录,则需要适当的权限。在本例中,您试图以非 root 用户的身份创建 /newfolder(因为 USER指令更改了用于运行其后任何命令的 UID)。这不会工作,因为 /是由 root拥有,并具有模式 dr-xr-xr-x

试试看:

RUN mkdir -p /newfolder
RUN chown newuser /newfolder
USER newuser
WORKDIR /newfolder

这将创建目录为 root,然后 chown它。

在创建了一个[ root ]用户并完成 xyz 之后,我实际上遇到了这个问题。当我重新构建我的 Docker (即使使用强制重新创建)时,它给了我各种各样的许可否认错误。安全问题对我来说不是问题

FROM ubuntu:latest


USER root


ENV TZ=Europe/Kiev
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone


RUN apt-get update && apt-get install...

然后做我的新用户代码

RUN useradd...

我知道这不是一个完美的答案,但我希望它有所帮助!

下面是我用非用户权限创建文件夹的过程

FROM solr:8
USER root
RUN mkdir /searchVolume
RUN chown solr:solr /searchVolume
USER solr

最后一行将登录重新放回 solr (或者您拥有的任何用户)。

对我有效的方法是在 docker 容器所在的目录上运行 chmod 777。因为您的新容器是一个新用户,所以它没有在本地机器上创建子目录的权限,所以 chmod 777授予了这个权限