代码之家  ›  专栏  ›  技术社区  ›  SpaceTrucker

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

  •  0
  • SpaceTrucker  · 技术社区  · 6 年前

    我使用以下方法 Dockerfile

    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$
    

    我需要做什么才能获得访问中的域和文件夹的权限 /A12芯

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   Kevin Kopf    6 年前

    COPY --chown=solr:solr ./services-core/search/A12Core /A12Core/
    

    这个 COPY 命令检查容器中是否存在目标路径。如果没有,则在复制之前创建它。

    1. 它需要 A12Core ./services-core/search
    2. /A12Core 存在。
    3. 显然,它不是。因此,该命令使用权限创建它 root:root .
    4. 最后,它复制 到新创建的

    最后你什么都有了 /A12芯 ,但它属于 root 你无法访问它。

    solr docker映像已设置 USER solr

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

    作为 the docs say

    USER 指令设置用户名。。。用户组。。。对于任何 RUN , CMD ENTRYPOINT Dockerfile .

        2
  •  1
  •   BMitch    6 年前

    您的目录没有执行权限:

    drw-r--r-- 3 solr solr 4096 Aug 31 14:21 conf
    

    否则,您将无法根据Linux文件系统权限将cd放入目录。您可以使用chmod在主机中修复此问题:

    chmod +x conf
    

    RUN 行),它将导致任何修改过的文件被复制到新层,因此如果递归地运行此操作,它可能会使图像的大小增加一倍,因此建议尽可能在构建主机上修复它。