我使用以下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目录中的文件和文件夹的权限,我需要怎么做?

请注意,我从Windows 7运行docker build。我的docker版本是18.03.0-ce

最佳答案

我在这里有另一个答案,这是错误的(但仍然可以解决您的问题:),但是现在我在您的Dockerfile中看到了拼写错误。让我们看一下这条线。

COPY --chown=solr:solr ./services-core/search/A12Core /A12Core/
COPY命令检查容器中的目标路径是否存在。如果没有,它将在复制之前创建它。
  • 它从A12Core中获取./services-core/search
  • 然后它检查路径/A12Core是否存在。
  • 显然,事实并非如此。因此,该命令使用root:root权限创建它。
  • 最后,它将A12Core的内容复制到新创建的A12Core

  • 最后,您在/A12Core中拥有了所有内容,但它属于root,因此您无法访问它。

    由于solr docker镜像已经设置了USER solr,因此方法是
    RUN mkdir /A12Core
    COPY ./services-core/search/A12Core /A12Core
    

    作为the docs say

    07-26 07:37