반응형
📘 TIL – 2025.04.14
"Ubuntu 서버에 Docker 기반 Nexus 설치 및 내부 레지스트리 구축하기"
오늘은 온에어 에셋 프로젝트에서 사용할 사내 Docker Registry로 Nexus Repository OSS를 설치하고,
이를 Docker 컨테이너로 구동하면서 겪은 시행착오들을 정리했다.
✅ 시도한 작업들
1. Ubuntu 서버에 Docker로 Nexus 설치
sudo docker run -d \
--name nexus \
-p 8081:8081 \
-v /opt/nexus-data:/nexus-data \
sonatype/nexus3
- 컨테이너 실행 직후 바로 종료되는 문제가 발생
- 로그 확인 결과, 디렉토리 권한 부족으로 로그 디렉토리를 만들지 못하는 에러가 있었다:
AccessDeniedException: /opt/sonatype/sonatype-work/nexus3/etc
📎 해결 방법: nexus-data
디렉토리 권한 변경
sudo chown -R 200:200 /opt/nexus-data
🔍 참고: UID 200이란?
- Nexus 컨테이너는 내부적으로 UID 200인 사용자(nexus)로 실행된다.
/opt/nexus-data
처럼 볼륨 마운트된 외부 디렉토리에 접근하려면,
해당 디렉토리를 UID 200 소유자로 설정해야 정상 동작한다.- 일반적인 컨테이너는 보안을 위해 root가 아닌 특정 UID로 실행되며,
파일시스템 권한은 이 UID 기준으로 평가된다.
2. 80 포트로 Nexus 외부 노출
sudo docker run -d \
--name nexus \
-p 80:8081 \
-v /opt/nexus-data:/nexus-data \
sonatype/nexus3
- Docker 자체에서 리버스 프록시 없이 포트 포워딩이 가능함을 확인
- 결과적으로
http://서버IP
접속 시 Nexus 웹 UI에 바로 접근 가능
⚠️ 단, 시스템에서 이미 80 포트를 쓰고 있는 경우는 충돌이 발생하므로 주의 필요
3. SSH 연결 관련 문제 해결
.pem
파일의 권한이 644일 경우, SSH 접속 시 다음과 같은 에러 발생:
UNPROTECTED PRIVATE KEY FILE
- 해결 방법:
chmod 600 ~/.ssh/nexus.pem
- 접속 시 사용자명을 명시하지 않으면 로컬 사용자명이 자동 사용되므로 실패함 →
ubuntu@
지정 필요
ssh -i nexus.pem ubuntu@서버-IP
📌 오늘 배운 것 총정리
- Docker에서
-p 80:8081
식의 포트 포워딩만으로 리버스 프록시 없이 서비스 노출 가능 - Nexus 컨테이너는 내부적으로 UID 200을 사용하며, 외부 마운트 볼륨에는 해당 UID 권한이 필요
.pem
키 파일은chmod 600
설정 필수- SSH 접속 시 사용자명을 명시하지 않으면 자동 실패 가능성 있음
🎯 결론
온에어 에셋 프로젝트에서는 이 Nexus 인스턴스를
서비스 배포용 Docker Registry로 사용하게 된다.
배포된 이미지들은 이 사내 Nexus를 통해 관리되며, CI/CD와도 연동할 계획이다.
반응형