如果在Docker构建期间添加了目录,该如何解决拒绝访问目录的权限?

时间:2018-08-31 14:27:16

标签: linux docker dockerfile file-permissions chown

我使用以下 var str = 'hello, how are you today? I am not bad and you?' function checker(str){ var count = 0 for(var i = 0; i < str.length; i++){ if(str[i] == ",") count++ } return `There is ${count} comma` } checker(str) //this returns "There is 1 comma" 扩展docker映像:

Dockerfile

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

运行从该Dockerfile构建的容器时,尝试访问USER solr下的文件或目录时,我获得了拒绝的权限:

/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$ 目录中文件和文件夹的权限?

请注意,我是从Windows 7运行docker构建的。我的docker版本是/A12Core

2 个答案:

答案 0 :(得分: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指令为{{1}之后的任何RUNCMDENTRYPOINT指令设置用户名...用户组... 1}}。

答案 1 :(得分:1)

您的目录没有执行权限:

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

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

chmod +x conf

如果您在Dockerfile中执行此命令(使用RUN行),将导致将所有修改后的文件复制到新层,因此,如果以递归方式运行此文件,则其大小可能会增加一倍图片,因此建议在可能的情况下将其修复在构建主机上。