Sangil's blog

https://github.com/ChoiSangIl Admin

Docker 외부 Volume설정시, 유저 권한 문제 (permission denied) DEV / DOCKER

2020-06-15 posted by sang12


일반적으로, Docker에서 로그 정보나 데이터성 정보들을 보관하기 위해, Volum을 이용해 Host 계정에 데이터를 연동하게 된다.

이때 Root 계정으로 사용하면 상관이 없지만, User 계정으로 사용할시 권한문제가 발생 할 수 있다.

왜냐하면 Docker는 기본적으로 User를 설정안하고 이미지를 올리게되면 Root 계정으로 파일을 쓰게된다. 

예를 들어 User1이라는 계정에서 톰캣 컨테이너를 올렸고, 톰캣 로그를 User1 계정 Volume에 연결했다고 하자, 이때 아무런 설정을 안하게 되면 User1 로그 파일이 Root권한으로 만들어져, User1계정에서는 접근하지 못하는 상황이 발생하게 된다 :).

내 계정에서 컨테이너를 올렸는데, 로그를 못본다니요..

그래서 해당 상황을 피하기 위해선, user 명령어를 통해, uid와 gid값을 셋팅해주는 방법이있다.

실제로 한번 해보자! 아래 tomcat의 webapps를 외부 volume로 지정한 docker-compose 명세가 있다. 그리고 user라는 명령어를 통해 환경변수 USER_ID와 GROUP_ID를 지정해주었다. user: "1002:1002"와 같이 써도 무방하다 . 그리고 docker-compose up -d 명령어를 쳐서 만들어진 webapps 권한을 조회하면 내가 설정한 uid, gid로 파일이 저장된것을 볼 수 있다. user를 지정해주지 않으면 root로 만들어지게 된다.

-docker-compose.yml

version: '3.8'
services:
  tomcat1:
    container_name: tomcat1
    image: tomcat:8.5.46-jdk8-openjdk
    ports:
      - "9091:8080"
    volumes:
     - ./vol/webapps/:/usr/local/tomcat/webapps/
    user: "${USER_ID}:${GROUP_ID}"

환경변수 설정 /home/사용자계정/.bash_profile

#아랫부분에 추가 
export USER_ID=$(id -u)
export GROUP_ID=$(id -g)
#docker #docker 권한 문제
REPLY