UID/GID 매핑 이해하기

UID/GID 매핑 이해하기

컨테이너 안에서 사용하는 UID와 GID가 호스트 시스템에서는 어떻게 보이는지, 그 매핑 방식이 rootless 모드와 userns-remap 모드에서 서로 다르다는 점을 먼저 알아둘게요. 이 차이를 이해하면 bind-mounted 디렉토리의 파일 권한을 설정할 때 헷갈리지 않아요. 지금부터 하나씩 차근차근 설명드릴게요.

userns-remap 모드에서의 매핑

userns-remap 모드에서는 컨테이너의 UID 0/etc/subuid 파일에 적힌 remap 사용자의 첫 번째 subordinate UID로 매핑돼요. 그리고 컨테이너 UID nsubuid + n으로 매핑됩니다. 예를 들어 remap 사용자의 첫 번째 subordinate UID가 100000이라면, 컨테이너 UID 0100000, UID 1100001 이런 식으로 연결되는 거예요.

rootless 모드에서의 매핑

rootless 모드에서는 매핑 규칙이 조금 달라요. 컨테이너 UID 0은 rootless Docker를 실행하는 사용자의 호스트 UID, 즉 id -u 명령의 결과값으로 매핑됩니다. 그리고 컨테이너 UID n (단, n >= 1)은 subuid + (n - 1)로 매핑돼요. 즉, 컨테이너의 root가 호스트에서는 자기 자신의 일반 사용자 계정으로 보이는 셈이에요.

GID도 동일한 규칙을 따라요

UID와 마찬가지로 GID도 같은 방식으로 매핑되는데, 이때는 /etc/subgid 파일을 사용해요. UID 규칙만 이해하면 GID도 자연스럽게 이해할 수 있어요.

bind-mounted 디렉토리에서의 영향

이 차이가 실전에서 중요해지는 순간은 bind-mounted 디렉토리의 파일 권한을 설정할 때예요. rootless 모드에서는 호스트 사용자가 소유한 파일이 컨테이너 안에서는 root가 소유한 것처럼 보이거든요. 그래서 컨테이너 안에서 파일을 수정하려고 할 때 권한 문제가 생길 수 있어요. 이 점을 미리 알고 있으면 훨씬 수월하게 대처할 수 있답니다.

더 알아보기 (Learn more)

출처: 공식문서