상현에 하루하루
All 개발자의 하루

docker volume 권한문제

( 업데이트: )

🤔 무엇을

웹앱을 거의 대부분 docker-compose.yamldocker 환경으로 구성한다. 그런데 volume을 설정하고 구성할때 로컬 맥북에서는 이상없이 docker 내부에서 파일이 쓰여지면 매핑된 로컬 폴더에도 파일이 잘 쓰여진다!

그런데 synology nas에서 volume을 구성해서 작성하면 docker가 작성하는 유저, 그룹이 33:33으로 고정되는 것이다 그래서 항상 웹앱 내부에서 권한이 없다는 오류가 나온다.

지금까지는 맵핑된 폴더의 권한을 33:33으로 변경해서 해결했지만 이게 정확한 해결방법이 아니라는 것을 알아서 이 것을 어떻게 해결해야할지 찾아봐야 한다.

🔎 방법찾기

현재커널의 접속한 유저 또는 다른 id 보기

$ id

도커 컨테이너

$ docker-compose exec DOCKER_CONTAINER_ID id

https://kaspars.net/blog/docker-volume-permissions

위 포스트를보고 아 내가 생각했던 대로 구성하고있구나를 알게되었음

구체적으로 도커엔진이 어떤 uid:gid를 구성하는지 알아야한다는 것을 깨달음

https://medium.com/@mccode/understanding-how-uid-and-gid-work-in-docker-containers-c37a01d01cf

위 포스트에서 도커가 어떤 매커니즘으로 uid:gid를 구성해주는지 잘알게 되었다.

결국 워드프레스 도커이미지는 내부에 apache가 www-data:www-data라는 기본 apache 설정을 가지고있다. www-data:www-data는 내 리눅스 커널에서는 33:33으로 표시되는 것이다.

🔑 해결

볼륨 매핑한 디렉토리의 기본 uid:gid를 사용하려면 도커엔진이 만들어낸 컨테이너 내부의 커널의 권한을 바꿔주거나 매핑한 디렉토리의 권한을 바꿔주거나 해야한다.

apache config 파일을 매핑해서 설정하거나… 어떻게하는게 관리가 편할까?

소감

docker-compose, docker가 이러한 권한까지 매핑해서 관리해주는 방식이라면 얼마나 편할까? 잠깐 생각해본다.


참고

https://dev.to/acro5piano/specifying-user-and-group-in-docker-i2e # docker, docker-compose에서 권한 매핑