Linux 如果目录是在docker构建期间添加的,如何修复访问该目录的被拒绝权限?

Linux 如果目录是在docker构建期间添加的,如何修复访问该目录的被拒绝权限?,linux,docker,dockerfile,file-permissions,chown,Linux,Docker,Dockerfile,File Permissions,Chown,我使用以下Dockerfile扩展docker映像: FROM solr:6.6 COPY --chown=solr:solr ./services-core/search/A12Core /A12Core/ 请注意,solr:6.6有一个USER-solr语句 当运行从该Dockerfile生成的容器时,尝试访问/A12Core下的文件或目录时,我的权限被拒绝: $ docker run -it 2f3c58f093e6 /bin/bash solr@c091f0cd9127:/opt/s

我使用以下
Dockerfile
扩展docker映像:

FROM solr:6.6

COPY --chown=solr:solr ./services-core/search/A12Core /A12Core/
请注意,
solr:6.6
有一个
USER-solr
语句

当运行从该Dockerfile生成的容器时,尝试访问
/A12Core
下的文件或目录时,我的权限被拒绝:

$ docker run -it 2f3c58f093e6 /bin/bash
solr@c091f0cd9127:/opt/solr$ cd /A12Core
solr@c091f0cd9127:/A12Core$ cd conf
bash: cd: conf: Permission denied
solr@c091f0cd9127:/A12Core$ ls -l
total 8
drw-r--r-- 3 solr solr 4096 Aug 31 14:21 conf
-rw-r--r-- 1 solr solr  158 Jun 28 14:25 core.properties
solr@c091f0cd9127:/A12Core$ whoami
solr
solr@c091f0cd9127:/A12Core$
我需要做什么才能获得访问
/A12Core
目录中的文件和文件夹的权限


请注意,我正在从Windows7运行docker版本。我的docker版本是
18.03.0-ce

我在这里有另一个答案,这个答案是错误的(但仍然解决了您的问题:),但是现在我在您的docker文件中看到了打字错误。让我们来看看这条线。

COPY --chown=solr:solr ./services-core/search/A12Core /A12Core/
COPY
命令检查容器中是否存在目标路径。如果不是,则在复制之前创建它

  • 它从
    /services-core/search
    获取
    12个核心
  • 然后检查路径
    /A12Core
    是否存在
  • 显然,事实并非如此。因此,该命令使用权限
    root:root
    创建它
  • 最后,它将
    A12Core
    的内容复制到新创建的
    A12Core
  • 最后,您的所有内容都在
    /A12Core
    中,但它属于
    根目录
    ,您无法访问它

    既然
    solr
    docker image已经设置了
    USER solr
    ,那么接下来的路就是

    RUN mkdir /A12Core
    COPY ./services-core/search/A12Core /A12Core
    
    作为

    USER
    指令设置用户名。。。用户组。。。对于
    RUN
    CMD
    ENTRYPOINT
    Dockerfile
    中遵循的任何
    指令


    您的目录没有执行权限:

    drw-r--r-- 3 solr solr 4096 Aug 31 14:21 conf
    
    否则,您将无法根据Linux文件系统权限将cd放入目录。您可以使用chmod在主机中修复此问题:

    chmod +x conf
    

    如果在Dockerfile中执行此命令(使用
    运行
    行),将导致任何修改的文件复制到新层,因此如果递归运行此命令,可能会使图像大小加倍,因此建议尽可能在构建主机上修复此命令。

    这可能会有所帮助:和。另请参见。当您复制Dockerfile中的目录时,docker复制的是目录的内容,而不是目录本身。所以你答案中的第四步是不正确的。