在将非 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
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
它。
这是一个适合我创建具有非用户权限的文件夹的过程
FROM solr:8
USER root
RUN mkdir /searchVolume
RUN chown solr:solr /searchVolume
USER solr
最后一行将登录回 solr(或您拥有的任何用户)。
您可以以 root 用户身份进入 docker 的 shell 并更改文件夹所有权:
docker exec -u root -t -i <container-id> /bin/sh
创建一个新文件夹:
mkdir -p /newfolder
更改所有权和权限:
chown new-user:new-user /newfolder
chmod 755 /newfolder
对我有用的是在 docker 容器所在的目录上运行 chmod 777。由于您的新容器是新用户,因此它无权在本地计算机上创建子目录,因此 chmod 777 给出该许可