Docker卷和主机权限

时间:2018-12-23 09:00:31

标签: docker docker-volume

例如,当我运行docker映像时

<table class="table table-borderless table-data3">
<h3>Expense Table</h3>
<br>
<thead>
    <tr>
        <th>Title</th>
        <th>Amount</th>                           
        <th>Amount</th>                           
    </tr>
</thead>
<tbody>
    <?php

    if(isset($_POST['submit'])){
        //get input in date format like 2018-12-05
        $start_date=$_POST['start_date'];
        $end_date=$_POST['end_date'];


        //get data between the two converted date $sdate and $edate
        $query='select amount,date from pl_per_day where STR_TO_DATE(date,"%Y-%m-%d %h:%i:%s")>=STR_TO_DATE($sdate,"%Y-%m-%d") AND STR_TO_DATE(date,"%Y-%m-%d %h:%i:%s")<=STR_TO_DATE($edate,"%Y-%m-%d")';
        $query_run=mysqli_query($connect , $query);
        while($row=mysqli_fetch_array($query_run)){
            $moddate=strtotime($row['date']);
    ?>

    <tr>
        <td><?php echo $row['amount']; ?></td>
        <td><?php echo $row['date'] ?></td>


    <?php }  } ?>
    </tr>
</tbody>

然后在类似的容器中创建一个目录

docker run -v /home/n1/workspace:/root/workspace -it rust:latest bash

它由我的主机上的root拥有。这导致我必须在每次打开容器后都必须更改权限才能使用该目录。

有没有一种方法可以告诉Docker在特定用户下从我的机器(主机)的角度来处理目录和文件?

2 个答案:

答案 0 :(得分:2)

您需要像在主机上一样在容器内以相同的uid运行应用程序,以使文件所有权匹配。我自己的解决方案是以根用户身份启动容器,在容器内调整用户的uid以匹配卷安装,然后向用户发送su以运行应用程序。可以在以下仓库中找到有关此脚本:https://github.com/sudo-bmitch/docker-base

在该存储库中,fix-perms脚本处理容器内uid / gid的更改,入口点脚本具有一个update members_member mm join (select mm2.email from members_member mm2 group by mm2.email having count(*) = 1 ) mme set mm.username = mm.email; ,以选定用户的身份运行该应用程序。

答案 1 :(得分:1)

可以,因为def f(i): result = {} result.update({'demo': i}) return result data = [ f(i) for i in range(5) } ] 使用Docker作为默认用户。您应该在Docker容器中创建用户,切换到该用户,然后创建文件夹,然后您将在主机上获得没有root权限的用户。

Dockerfile

root