UID/GID 매핑 이해하기
UID/GID 매핑 이해하기
컨테이너 안에서 사용하는 UID와 GID가 호스트 시스템에서는 어떻게 보이는지, 그 매핑 방식이 rootless 모드와 userns-remap 모드에서 서로 다르다는 점을 먼저 알아둘게요. 이 차이를 이해하면 bind-mounted 디렉토리의 파일 권한을 설정할 때 헷갈리지 않아요. 지금부터 하나씩 차근차근 설명드릴게요.
userns-remap 모드에서의 매핑
userns-remap 모드에서는 컨테이너의 UID 0이 /etc/subuid 파일에 적힌 remap 사용자의 첫 번째 subordinate UID로 매핑돼요. 그리고 컨테이너 UID n은 subuid + n으로 매핑됩니다. 예를 들어 remap 사용자의 첫 번째 subordinate UID가 100000이라면, 컨테이너 UID 0은 100000, UID 1은 100001 이런 식으로 연결되는 거예요.
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)
출처: 공식문서