我使用以下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
码头图像已经设置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文件系统权限进入目录。您可以使用chmod在主机中修复它:
chmod +x conf
如果你在Dockerfile中执行这个命令(使用RUN
行),它将导致任何修改过的文件被复制到一个新层,所以如果你递归地运行它,它可能会使你的图像大小加倍,因此建议修复它尽可能在你的构建主机上。