Ubuntu 24.04 베이스 이미지 — UID 1000 충돌
보안 점검 권고로 오래된 컨테이너 베이스 이미지를 최신 LTS 인 Ubuntu 24.04 로 올리는 작업이었습니다.
베이스 이미지를 ubuntu:24.04 로 올렸더니 빌드가 유저 생성 단계에서
깨졌습니다. 바꾼 건 베이스 이미지 태그 하나뿐이었습니다.
원인 — 24.04의 UID 1000 기본 유저
앱을 non-root 로 돌리려고 관습적으로 이렇게 UID/GID 1000 유저를 만들어 왔습니다.
RUN groupadd -g 1000 app && useradd -u 1000 -g 1000 app
ubuntu:24.04 부터는 이미지에 ubuntu 라는 기본 유저가 이미 들어 있고,
그게 UID/GID 1000 을 차지합니다. 그래서 1000 으로 새 유저를 만들려 하면
충돌로 실패합니다. 22.04 까지는 1000 이 비어 있어서 이 패턴이 잘 됐는데,
24.04 에서 바뀐 겁니다.
해결 — 기존 유저 개명
1000 을 그대로 쓰고 싶으면, 유저를 새로 만들지 말고 이미 있는 ubuntu 유저의
이름을 바꾸면 됩니다.
RUN groupmod -n app ubuntu && \
usermod -l app -d /home/app -m -s /bin/bash ubuntu
groupmod -n 으로 그룹명을, usermod -l 로 유저명을 바꾸고 홈 디렉토리까지
옮깁니다. UID/GID 는 1000 그대로라 볼륨 권한 같은 것도 안 깨집니다.
Debian trixie의 openjdk-17 부재
같은 보안 점검에서 JDK 이미지도 손봤는데, Debian trixie 메인 저장소엔
openjdk-17 패키지가 없었습니다(21, 25 만 있음). 17 을 유지하려면 Adoptium
Temurin apt 저장소를 코드네임 기준으로 추가해야 했습니다.
RUN echo "deb https://packages.adoptium.net/artifactory/deb $VERSION_CODENAME main" \
> /etc/apt/sources.list.d/adoptium.list
베이스 이미지 업그레이드가 빌드를 깨는 지점
베이스 이미지 메이저 업그레이드는 “버전 숫자만 바꾸는” 일이 아닙니다. 배포판이 기본 유저를 넣거나(24.04 의 UID 1000), 저장소에서 패키지를 빼는(trixie 의 openjdk-17) 변화가 조용히 빌드를 깹니다. non-root 유저는 UID 를 고정으로 새로 만드는 대신, 배포판이 주는 기본 유저를 개명해 쓰는 쪽이 이런 충돌을 피합니다.
댓글 0