2014-10-06 124 views
0
[email protected]$ grep -e CMD -e RUN Dockerfile 
RUN apt-get update 
RUN apt-get -y install ruby ruby-dev build-essential redis-tools 
RUN gem install --no-rdoc --no-ri sinatra json redis 
RUN mkdir -p /opt/webapp 
RUN chmod 777 /opt/webapp 
CMD ["/opt/webapp/bin/webapp"] 

[email protected]$ docker build -t "alok87/sinatra" . 

[email protected]$ docker run -d -p 80 --name ubunsin10 -v $PWD/webapp:/opt/webapp alok87/sinatra 
25ekgjalgjal25rkg 
[email protected]$ docker logs ubunsin10 
/opt/webapp/bin/webapp: Permission Denied - /opt/webapp/bin/webapp (Errno:EACCESS) 

問題是卷正在安裝到容器,但從容器中它沒有任何權限到安裝的卷。我可以cd到/ opt/webapp/bin但我不能ls/opt/webapp/bin。碼頭集裝箱未顯示卷安裝 - 訪問問題

請建議如何修復它。主機裝載具有777權限的所有文件。

+0

瞭解更多關於它的信息爲什麼要剪出很多Dockerfile?很難看出你是否在做任何你不該做的事情。 – 2014-10-06 15:11:34

回答

1

Docker進程具有svirt_lxc_net_t默認類型。默認情況下,這些進程是而不是允許訪問您的內容/var,/root/home

您已經爲主文件夾指定了一個合適的類型標籤,以允許容器進程訪問內容。您可以通過給$ PWD/webapp文件夾輸入標籤svirt_sandbox_file_t來完成此操作。

chcon -Rt svirt_sandbox_file_t $PWD/webapp 

之後,您可以從容器內訪問該文件夾。在Dan Walsh's article - Bringing new security features to Docker

+0

謝謝丹。使用--privileged = true標誌啓動容器後問題得到解決。 – 2014-10-09 07:18:10

+0

這可以解決您的問題,但如果您運行特權,則基本上會爲您的託管服務器容器充分享有主機系統的權利。想想安全性,這可能不是你想要公開的內容。 – Behe 2014-10-09 07:24:03