Sign In

OCI Ubuntu에서 Docker 권한 문제 해결 가이드

OCI(Oracle Cloud Infrastructure) Ubuntu 인스턴스에서 Docker/Docker Compose 사용 시 자주 발생하는 권한 문제를 해결하는 방법입니다.

문제 상황

ubuntu@instance:~$ id ubuntu
uid=1001(ubuntu) gid=1001(ubuntu) groups=1001(ubuntu),...
ubuntu@instance:~$ id opc  
uid=1000(opc) gid=1000(opc) groups=1000(opc),...
OCI Ubuntu 특징: opc(UID 1000)가 먼저 생성되어 ubuntu가 UID 1001을 차지합니다. AWS EC2 Ubuntu는 ubuntu가 UID 1000이라 Docker 권한 문제가 적습니다.

Docker 권한 충돌 원인

컨테이너 이미지 기본 사용자: UID 1000 기대
호스트 ubuntu: UID 1001
Volume 마운트 시 권한 불일치 → Permission denied

해결 방법 1: docker-compose user 설정 (권장)

# docker-compose.yml
services:
  app:
    image: your-image
    user: "1001:1001"  # ubuntu UID:GID
    volumes:
      - ./data:/app/data
    # 또는 동적 설정
    # user: "${UID:-1001}:${GID:-1001}"
사용법:
# 환경변수로 동적 설정
export UID=$(id -u)  # 1001
export GID=$(id -g)  # 1001
docker compose up -d

해결 방법 2: 호스트 Volume chown

# 현재 사용자 확인
id ubuntu  # uid=1001 확인

# Docker volume만 chown (안전)
sudo chown -R 1001:1001 /home/ubuntu/docker-volumes
sudo chmod -R 755 /home/ubuntu/docker-volumes

# opc(1000) 사용 시
sudo chown -R 1000:1000 /home/ubuntu/shared-volumes

해결 방법 3: opc 사용자 전환

# opc로 전환 (UID 1000)
sudo su - opc

# Docker 작업 후 ubuntu로 복귀
exit

사용자 UID 확인 명령어

# 현재 사용자
whoami          # ubuntu
id              # uid=1001(ubuntu)

# 모든 사용자 확인
id ubuntu       # uid=1001
id opc         # uid=1000
getent passwd | grep -E '^(ubuntu|opc)'

⚠️ 주의사항

❌ 하지 말 것

# 홈 전체 변경 X (문제 발생)
sudo chown -R 1000:1000 /home/ubuntu/  # 위험!
문제: .ssh, .config, 앱 데이터 접근 불가, 시스템 오류 발생

✅ 올바른 방법

# 특정 volume만 변경
sudo chown -R 1001:1001 /home/ubuntu/my-docker-app/

클라우드별 UID 비교

클라우드
기본 사용자
UID
OCI Ubuntu
ubuntu
1001 (opc가 1000 선점)
AWS EC2 Ubuntu
ubuntu
1000
GCP Ubuntu
사용자 지정
1000

완전한 docker-compose 예시

version: '3.8'
services:
  web:
    image: nginx:latest
    user: "${UID:-1001}:${GID:-1001}"
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    restart: unless-stopped

  app:
    image: node:18
    user: "${UID:-1001}:${GID:-1001}"
    working_dir: /app
    volumes:
      - .:/app
    command: npm start

실행 스크립트

#!/bin/bash
# fix-docker-permissions.sh

echo "OCI Ubuntu Docker 권한 자동 설정"
echo "현재 UID: $(id -u), GID: $(id -g)"

# docker-compose 환경변수 설정
export UID=$(id -u)
export GID=$(id -g)
export DOCKER_USER="${UID}:${GID}"

echo "DOCKER_USER=${DOCKER_USER} 설정 완료"
echo "docker compose up 실행하세요"

요약 체크리스트

id ubuntu → uid=1001 확인
docker-compose에 user: "1001:1001" 추가
또는 sudo chown -R 1001:1001 ./docker-volumes
docker compose up 테스트
컨테이너 로그 확인: docker compose logs
결론: OCI Ubuntu에서는 user: "1001:1001" 설정이 가장 간단하고 안전합니다! 🚀