IT/WSL

도커 컨테이너 volume 권한에 대해서

상짱 2024. 12. 3. 20:37
반응형

- 테스트
- docker-compose-tomcat.yml

name: tomcat

services:
  app-tomcat:
    image: tomcat:9.0.97-jdk8
    container_name: app-tomcat
    #user: 1000:1000
    ports:
      - 8080:8080
    volumes:
      - ./tomcat/webapps/:/app/webapps/
      - ./tomcat/conf/:/app/conf/

 

$ docker compose -f docker-compose-tomcat.yml up -d
$ docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED         STATUS          PORTS                                       NAMES
964ef8cb99d4   tomcat:9.0.97-jdk8   "catalina.sh run"        3 minutes ago   Up 3 minutes    0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   app-tomcat

$ ls -al
drwxr-xr-x  4 root   root   4096 Dec  3 20:16 tomcat

$ ls -al tomcat
drwxr-xr-x 2 root root 4096 Dec  3 20:31 conf
drwxr-xr-x 2 root root 4096 Dec  3 20:31 webapps

 
- tomcat 디렉토리는 root 권한소유자이다.
- app-tomcat 컨테이너에 접속한다.

$ docker exec -it app-tomcat bash

 
- 컨테이너 bash

root@964ef8cb99d4:/usr/local/tomcat# cd
root@964ef8cb99d4:~# pwd
/root

 
- 계정을 확인한다.

root@964ef8cb99d4:/usr/local/tomcat# cd /home
root@964ef8cb99d4:/home# ls -al
drwxr-x--- 2 ubuntu ubuntu 4096 Oct 16 07:00 ubuntu

 
- 계정 정보를 확인하고 volume 디렉토리에 권한소유자를 준다.

root@964ef8cb99d4:/home# id ubuntu
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),....

root@964ef8cb99d4:/home# chown -R 1000:1000 /app
root@964ef8cb99d4:/home# ls -al /app
drwxr-xr-x 2 ubuntu ubuntu 4096 Dec  3 11:16 conf
drwxr-xr-x 2 ubuntu ubuntu 4096 Dec  3 11:08 webapps

root@964ef8cb99d4:/home# exit

 
- 호스트 콘솔 확인

$ ls -al
drwxr-xr-x  4 root   root   4096 Dec  3 20:16 tomcat

$ ls -al tomcat
drwxr-xr-x 2 ubuntu ubuntu 4096 Dec  3 20:16 conf
drwxr-xr-x 2 ubuntu ubuntu 4096 Dec  3 20:08 webapps

 
- 루트 디렉토리인 tomcat 은 변경이 되지 않았지만, 하위 디렉토리는 소유자가 변경된 것을 확인할 수 있다.
- wsl 에 설치된 ubuntu 기준으로 실제 서버환경에서의 도커에 확인이 필요하다.
- 현재 경험상, 가장 좋은 방법은 호스트 볼륨 디렉토리는 계정소유자가 미리 만들어 두고, docker compose 작업하는 것이 가장 나은 듯하다.
- 그리고 컨테이너 볼륨 경로가 기본이미지의 생성파일경로라면, 컨테이너 기동시, 호스트 기준으로 동기화된다.
- 호스트볼륨을 컨테이너 실행 및 설정파일경로로 볼륨을 잡을 시, 호스트볼륨경로에 파일이 없다면, 컨테이너 경로에 파일이 없으므로, 컨테이너가 올라가지 않으니, 주의하자.
 

반응형