2017-12-12 23 views
0

다음과 같이 간단한 tomcat 도커 파일이 있습니다. 내가 고정 표시기 이미지를 만들 때Docker Container의 파일 사용 권한

FROM tomcat:7 
MAINTAINER *** 
COPY sample.war /opt/tomcat/webapps 
USER tomcat 
RUN chown -R tomcat:tomcat /tmp/ 
CMD ["catalina.sh", "run"] 

그것은 나를, 내가 주인이 바람둥이가 될 것으로 기대하고있다

tomcat tomcat Dec 11 08:04 tmp 

내 샘플 응용 프로그램은 TMP 폴더 안에 몇 개의 디렉토리를 생성으로 권한을 파일 줄 것이다 그러나 그것은 뿌리처럼 보인다 . 나는 사용자 tomcat으로 컨테이너를 실행하고 있기 때문에 tomcat 사용자를 사용하여 컨테이너를 만드는 방법.

답변

0

나는 당신이 제공 한 복수의 오류 Dockerfile을 빌드하고 실행하려고 시도했다. "앱"에서 생성 한 파일 권한에 대해 묻습니다. 그래서 여기에 내 출발점이 있습니다 :

나는 "app"가 catalina.sh이라고 가정합니다. /tmp/에 파일을 만드는 프로세스입니다. 우리는 컨테이너를 사용자 tomcat으로 실행하기 때문에 파일 권한에 따라 자동으로 파일을 생성합니다. 아래에서 코드 주석을 살펴보고 여기에서 진행되는 작업에 대한 자세한 정보를 얻으십시오.

Dockerfile

:

FROM httpd 
# I switched the image since you would need to configure tomcat to make it run 
# httpd works out of the box without any application specific config. That's why 

COPY ./catalina.sh/
RUN chmod +x /catalina.sh # copy your 'app'/entrypoint into the image 

RUN groupadd -r tomcat \ 
    && useradd -r -g tomcat tomcat 
# create a new user and group under which the container runs 
RUN chown -R tomcat:tomcat /tmp/ # change initial file permisisons. 
# So that our new user tomcat is allowed to access and fill the directory with files 

USER tomcat # switch the user under which the container runs 

ENTRYPOINT ["/catalina.sh"] 

catalina.sh :

#!/bin/bash 

mkdir /tmp/test # create a dir 
touch /tmp/yolo.txt # and some files 
touch /tmp/test/yolo2.txt # to check the file permissions later on 

while true; do echo "sleep"; sleep 2; done 
# endless loop so that the container doesn't exit 

는 실행 용기에 파일 권한을 exec을 확인하십시오.

docker exec -ti <container_name> bash

enter image description here

+0

'catalina.sh'는 앱이 아닙니다. Tomcat 용 Startscript입니다. 'catalina.sh run'은 포어 그라운드에서 tomcat을 시작하여 시작한 콘솔에 로그를 표시합니다. Ctrl-C를 누르면 바람둥이가 종료됩니다. – adbo

+0

아무런 차이가 없다고 생각합니다. ''Dockerfile''에''USER'' 지시어를 제공하면, 여러분은이 컨텍스트 하에서 컨테이너를 실행하고있는 것입니다. 그래서''바람둥이''가 새로운 파일을 만들면 관련 파일 권한이 생깁니다. 같은 행동이어야합니다. 이미지를 다시 바람둥이로 전환하고 시도해보십시오. –

-1

에 부두 노동자는 일반적으로 루트 권한으로 실행, 그래서 당신이 (귀하의 경우 바람둥이) 사용자 (존재하지 않는 경우) 고정 표시기 그룹을 생성하고 추가해야합니다 생각 도커 그룹.

가 고정 표시기 그룹을 만듭니다

그룹을 고정 표시기에 사용자를 추가하는 방법은 아래를 참조하십시오.

$ sudo groupadd docker 

사용자를 도커 그룹에 추가하십시오.

$ sudo usermod -aG docker tomcat 

는 참고 :이 https://docs.docker.com/engine/installation/linux/linux-postinstall/#manage-docker-as-a-non-root-user

, 나는 당신의 문제가 해결 될 수 있다고 생각합니다.

+0

이유 투표를하십시오! – Anand