更改Windows主机上docker容器内已装入文件夹中的文件权限

更改Windows主机上docker容器内已装入文件夹中的文件权限,docker,docker-compose,docker-machine,docker-toolbox,docker-for-windows,Docker,Docker Compose,Docker Machine,Docker Toolbox,Docker For Windows,免责声明/编辑2 几年后,对于阅读这个问题的每个人来说——如果你在Windows上,并且想在linux容器中使用docker,我强烈建议不要使用docker for Windows,而是在VM中启动整个docker环境。这个ext3ntfs问题将使您在许多不同的级别上感到头疼,以至于安装docker机器可能根本不值得 编辑: 我正在使用它在Virtualbox VM中启动一个boot2docker实例,该VM在/c/Users上有一个共享文件夹,您可以从该文件夹将卷装载到容器中。上述卷的权限就

免责声明/编辑2

几年后,对于阅读这个问题的每个人来说——如果你在Windows上,并且想在linux容器中使用docker,我强烈建议不要使用docker for Windows,而是在VM中启动整个docker环境。这个ext3ntfs问题将使您在许多不同的级别上感到头疼,以至于安装docker机器可能根本不值得


编辑:

我正在使用它在Virtualbox VM中启动一个boot2docker实例,该VM在/c/Users上有一个共享文件夹,您可以从该文件夹将卷装载到容器中。上述卷的权限就是问题所在。虚拟机存储在/c/Users/tom/.docker下/

我选择在Hyper-V上使用
docker机器
Virtualbox工作流,因为我的日常工作流中需要VBox,并且由于不同虚拟机监控程序之间的不兼容,无法在一个系统上同时运行Hyper-V和Virtualbox

原始问题

我目前正试图在windows上的容器中设置PHPMyAdmin,但无法更改
config.inc.php
文件的权限

我发现:我认为这可能有点关联,但它似乎只适用于MongoDB

这是我的docker-compose.yml

    version: "3"

    services:
      pma:
        image: (secrect company registry)/phpmyadmin
        ports: 
          - 9090:80
        volumes:
          - /c/Users/tom/projects/myproject/data/var/www/public/config.inc.php:/var/www/public/config.inc.php
现在,当我
docker exec-it[container]bash
并在装载的目录中进行更改时,我尝试在
config.inc.php
上运行
chmod
,但由于某种原因,它以静默方式失败

root@22a4bag43245: ls -la config.inc.php
-rw------- 1 root root 0 Aug 11 15:11 config.inc.php
root@22a4bag43245: chmod 655 config.inc.php
root@22a4bag43245: ls -la config.inc.php
-rw------- 1 root root 0 Aug 11 15:11 config.inc.php
考虑到链接的答案,我认为我可以将卷移出我的Userhome,但是vbox根本不装载文件夹


如何持续更改
/var/www/public/config.inc.php的文件权限?

请尝试以下操作之一:

  • 如果可以重建图像图像:
    图像:(secrect company registry)/docker-stretchimal-apache2-php7-pma
    ,然后在docker文件中添加以下内容

    用户根目录
    运行chmod 655 config.inc.php

  • 然后,您可以重建图像并将其推送到注册表,您所做的应该可以正常工作。这应该是您的首选解决方案,因为您不希望每次启动新容器时都手动更改权限

  • 尝试显式使用用户根执行

    docker exec-it-u root[container]bash


  • 我也有同样的问题,即使在使用了
    chown
    之后,也无法更改所有权。正如我所说,这是因为NTFS卷安装在ext文件系统中。所以我用了另一种方法

    docker内部的卷没有这些问题。因此,您可以将文件装载到内部docker卷上,然后在本地文件夹中创建指向该文件的硬符号链接,只要您愿意:

    sudo ln $(docker volume inspect --format '{{ .Mountpoint }}' <project_name>_<volume_name>) <absolute_path_of_destination>
    
    sudo ln$(docker volume inspect--format'{{.Mountpoint}}}}}是这个过程的一个工作实现,它装载并链接一个目录。如果您想了解详细信息,请参阅中的
    可能的修复
    部分

    编辑

    实施此方法的步骤:

  • 将相关文件装入内部docker卷(也称为
    命名卷
  • 在进行硬链接之前,请确保存在卷和相关文件。为了确保这一点,您应该在之前至少运行一次容器,或者如果您想自动创建此文件,您可以包括一个docker运行,它创建所需的文件并退出

    docker运行--rm-itd\
    -v“u:/absolute/path”\
    bash-c“touch/absolute/path/”

  • 此docker运行将创建卷和所需文件。这里,
    container
    是我的项目名称,默认情况下,它是项目所在文件夹的名称,
    与我们希望在原始容器中使用的文件夹相同<代码>
    可以与原始容器中已使用的代码相同

  • 在操作系统中创建到系统上实际文件位置的硬链接。您可以使用
    docker volume inspect--format'{{.Mountpoint}}'./
    找到文件位置。Linux用户可以在终端中使用
    ln
    ,windows用户可以在命令提示符中使用
    mklink

  • 在步骤3中,我们没有使用
    /absolute/path
    ,因为
    已经引用了该位置,我们只需要引用该文件。

    我无法更改从windows主机装入docker容器的目录/卷的权限。阿福,1。将
    chmod
    图像中的
    confic.inc.php
    ,它将被我安装的confic.inc.php覆盖。2.不起作用。即使I
    -u root
    ,当I
    chmod
    @TomM时,权限仍然不会更改。您可以为映像提供docker文件吗?不,抱歉。但它也不能处理来自官方注册中心的图像,因此我怀疑该图像是否存在故障DockerFile在装入卷之前执行(生成),您不能以这种方式更改已装入卷中的权限。是
    /c/Users/tom/projects/myproject/data/var/www/public/config.inc.php
    文件还是文件夹?config.inc.php是文件,但将文件夹还是文件装入卷并不重要,我无法更改权限查找另一个具有相同问题的链接:您可能希望尝试装载父目录而不是单个文件。更改装载点上的权限可能是一件特殊的事情(比如:不可能)。这种方法看起来很有希望。我会尝试一下,然后回复你,谢谢等等,我不能在我的主机操作系统上硬链接,因为它是windows。我误解你了吗?这是针对linux操作系统的,对于windows,你可以使用
    mklink
    。更多详细信息我使用的不是Hyper-V而是virtualbox驱动程序和
    docker机器
    。还是有机会让它发挥作用吗?