簡體   English   中英

容器中的Docker“權限被拒絕”

[英]Docker "permission denied" in container

我正在嘗試通過以下方式運行 docker 映像

docker run  -it -v $PWD/examples:/home/user/examples image 

這應該使主機中的$PWD/examples可以在容器中訪問。 然而,當我ls的容器,它不斷給我

ls: cannot access 'examples': Permission denied

我已經嘗試過類似問題的答案, z/Z選項和chcon -Rt svirt_sandbox_file_t /host/path/run --privileged ,但它們對我的情況都沒有任何影響。 事實上, z選項似乎在第一次ls時起作用,但是當我第二次發出ls時,它再次被拒絕。

在評論中,結果表明圖像的Dockerfile中可能有一條USER指令。 由於examples文件訪問權限,不允許該用戶訪問examples


可以使用 docker run 選項--user取代USER

一個快速而骯臟的解決方案是使用--user=root運行以允許任意訪問。 請注意,在容器中以root身份寫入文件夾examples文件將由root擁有。

更好的解決方案是尋找examples所有者,稱他為foo 指定其用戶 id 和組 id 以在容器中具有完全相同的用戶:

docker run --user $(id -u foo):$(id -g foo)  imagename

另一種可能的解決方案是允許任意訪問chmod 666 exampleschmod 644 examples ,但很可能您不想要那樣。


最好的方法是查看 Dockerfile 並檢查USER指令的目的。

  • 如果它只是為了避免在容器中使用 root,最好的方法是使用--user=foo或更准確地說--user=$(id -u foo):$(id -g foo)
  • 如果 Dockerfile/image 中的某些內容依賴於特定的USER ,則最好更改examples訪問權限。
  • 如果您有權訪問 Dockerfile,您可以調整它以適合您的主機用戶/ examples的所有者。

嘗試以特權身份運行容器:

sudo docker run --privileged=true -itd -v /***/***:/***  ubuntu bash

例如: sudo docker run --privileged=true -itd -v /home/willie:/wille ubuntu bash

暫無
暫無

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

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