如果在docker build期间添加了该目录,如何修复拒绝访问目录的权限?

问题描述 投票:0回答:2

我使用以下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

linux docker dockerfile file-permissions chown
2个回答
1
投票

我在这里有另一个答案,这是错误的(但仍然解决了你的问题:),但现在我看到你的Dockerfile中的拼写错误。我们来看看这一行。

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

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

  1. 需要来自A12Core./services-core/search
  2. 然后它检查路径/A12Core是否存在。
  3. 显然,它没有。因此,该命令使用权限root:root创建它。
  4. 最后,它将A12Core的内容复制到新创建的A12Core

最后你在/A12Core拥有一切,但它属于root,你无法访问它。

由于solr码头图像已经设置USER solr,所以要走的路

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

作为the docs say

USER指令设置用户名...用户组...对于在RUN中跟随它的任何CMDENTRYPOINTDockerfile指令。


1
投票

您的目录没有执行权限:

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

没有它,你不能根据Linux文件系统权限进入目录。您可以使用chmod在主机中修复它:

chmod +x conf

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

© www.soinside.com 2019 - 2024. All rights reserved.