簡體   English   中英

如果在Docker構建期間添加了目錄,該如何解決拒絕訪問目錄的權限?

[英]How to fix denied permission to access a directory if that directory was added during docker build?

我使用以下Dockerfile擴展了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$

為了獲得訪問/A12Core目錄中的文件和文件夾的權限,我需要做什么?

請注意,我正在從Windows 7運行18.03.0-ce build。我的18.03.0-ce版本是18.03.0-ce

我在這里有另一個答案,這是錯誤的(但仍然可以解決您的問題:),但是現在我在您的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

最后,所有內容都在/A12Core ,但它屬於root ,您無法訪問它。

由於solr docker image已經設置了USER solr ,所以要走的路是

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

正如文檔所說

USER指令設置的用戶名...用戶群......對於任何RUNCMDENTRYPOINT是按照它的指示Dockerfile

您的目錄沒有執行權限:

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

否則,您將無法根據Linux文件系統權限進入該目錄。 您可以使用chmod在主機中修復該問題:

chmod +x conf

如果在Dockerfile中執行此命令(並帶有RUN行),它將導致將任何修改過的文件復制到新層,因此,如果以遞歸方式運行此命令,則可能會使映像大小增加一倍,因此建議進行修復如果可能,將其放在構建主機上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM