无法创建目录。 docker 容器内的权限被拒绝

问题描述 投票:0回答:4

在将非 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

ubuntu docker sudoers
4个回答
97
投票

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
它。


29
投票

这是一个适合我创建具有非用户权限的文件夹的过程

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

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


0
投票

您可以以 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

-8
投票

对我有用的是在 docker 容器所在的目录上运行 chmod 777。由于您的新容器是新用户,因此它无权在本地计算机上创建子目录,因此 chmod 777 给出该许可

© www.soinside.com 2019 - 2024. All rights reserved.