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

时间:2017-08-07 18:04:04

标签: ubuntu docker sudoers

在将非root用户添加到sudoers组的映像构建期间无法创建文件夹。这是我的Dockerfile:

$launchsitesatellite = DB::table('satellites')
    ->where(function($q) use ($request) {
        if(empty($request->type) && empty($request->rocket_type)) {
            $q->orWhere('satname','LIKE','%'.$request->search.'%')
                ->orWhere('norad_cat_id','LIKE','%'.$request->search.'%')
                ->orWhere('country','LIKE','%'.$request->search.'%')
                ->orWhere('object_id','LIKE','%'.$request->search.'%');
        } else {
            if(!empty($request->type)) { // If the type is specified, use it
                $q->orWhere($request->type,'LIKE','%'.$request->search.'%');

            }
            if(!empty($request->rocket_type)) { // If the rocket_type is specified, use it
                $q->orWhere('rocket_type','LIKE','%'.$request->rocket_type.'%');

            }
        }

    })
    ->where('site', $site_code)->get();

我收到错误: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

4 个答案:

答案 0 :(得分:21)

Docker容器中的文件系统就像Docker容器外的filesytem一样:如果要创建文件或目录,则需要适当的权限。在这种情况下,您尝试以非root用户身份创建/newfolder(因为USER指令更改了用于运行其后任何命令的UID)。这不起作用,因为/root所有并且模式为dr-xr-xr-x

尝试改为:

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

这将创建目录root,然后chown

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

docker cp some_dir mysql:/opt

不是创建目录,而是使用docker cp将空目录或文件复制到容器中的该路径。

答案 3 :(得分:0)

在创建 [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...

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