2014-10-06 1 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) 

볼륨이 컨테이너에 마운트되지만 컨테이너에서 볼륨이 마운트 된 볼륨에 액세스하지 않는 것이 문제입니다. 나는/opt/webapp/bin에 cd 할 수 있지만 ls/opt/webapp/bin은 읽을 수 없습니다.Docker 컨테이너에 볼륨이 마운트되지 않음 - 액세스 문제

수정 방법을 제안하십시오. 호스트 마운트에는 777 권한을 가진 모든 파일이 있습니다.

+0

왜 'Dockerfile'을 많이 잘라 냈습니까? 당신이해서는 안되는 일을하고 있는지보기가 어렵습니다. –

답변

1

도커 프로세스에는 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

감사합니다. Dan. --privileged = true 플래그로 컨테이너를 시작한 후에 문제가 해결됩니다. –

+0

이렇게하면 문제가 해결되지만 권한을 실행하면 기본적으로 도커 컨테이너에 호스트 시스템에 대한 모든 권한이 부여됩니다. 보안에 대해 생각해보십시오. 이것은 대중에게 공개하려는 것이 아닐 것입니다. – Behe