fix docker-compose emulating podman

진웅·2025년 8월 19일

harbor

목록 보기
4/5

아, 바로 그 문제네요! systemctl enable --now podman.socket시스템(root) 레벨에서 실행되는데, 보통 Podman은 사용자 레벨에서 실행해야 합니다.

🔍 현재 상황 확인

1단계: Podman 소켓 상태 확인

# 시스템 레벨 podman 소켓 (root)
sudo systemctl status podman.socket

# 사용자 레벨 podman 소켓
systemctl --user status podman.socket

# 현재 DOCKER_HOST 확인
echo $DOCKER_HOST

# 어떤 소켓이 활성화되어 있는지 확인
sudo ls -la /run/podman/podman.sock 2>/dev/null && echo "✅ 시스템 소켓 있음"
ls -la /run/user/$UID/podman/podman.sock 2>/dev/null && echo "✅ 사용자 소켓 있음"

🔧 해결 방법들

방법 1: 사용자 레벨로 변경 (권장)

# 1. 시스템 레벨 podman 소켓 중지
sudo systemctl stop podman.socket
sudo systemctl disable podman.socket

# 2. 사용자 레벨 podman 소켓 시작
systemctl --user enable --now podman.socket

# 3. DOCKER_HOST 환경변수 수정
export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock

# 4. 영구 설정
echo 'export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock' >> ~/.bashrc

# 5. 연결 테스트
docker version

방법 2: Root 모드 그대로 사용

# 1. DOCKER_HOST를 시스템 소켓으로 설정
export DOCKER_HOST=unix:///run/podman/podman.sock

# 2. Harbor 설치 시 sudo 사용 (root 권한 필요)
cd /opt/harbor
sudo -E ./install.sh --with-trivy

# 3. docker-compose도 sudo로 실행
sudo -E docker-compose ps

🚀 권장 해결 순서 (사용자 레벨로 변경)

1단계: 현재 Harbor 중지

cd /opt/harbor

# 현재 실행 중인 Harbor 중지 (root 모드)
sudo DOCKER_HOST=unix:///run/podman/podman.sock docker-compose down -v 2>/dev/null || true

2단계: Podman 소켓 사용자 레벨로 변경

# 시스템 레벨 podman 소켓 중지
sudo systemctl stop podman.socket
sudo systemctl disable podman.socket

# 사용자 레벨 podman 소켓 시작
systemctl --user enable --now podman.socket

# 상태 확인
systemctl --user status podman.socket

3단계: 환경변수 재설정

# DOCKER_HOST 재설정
export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock

# 연결 테스트
docker version
docker-compose version

# 환경변수 영구 저장
echo 'export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock' >> ~/.bashrc

4단계: Harbor 재시작

cd /opt/harbor

# 이미지 확인 (사용자 레벨 podman)
podman images | grep harbor

# 필요시 이미지 재로딩
podman load -i ./harbor*.tar.gz

# nginx-photon 이미지 확인/다운로드
podman images | grep nginx-photon || podman pull goharbor/nginx-photon:v2.13.2

# Harbor 시작 (사용자 레벨)
docker-compose up -d

5단계: 확인

# Podman 컨테이너 확인
podman ps

# docker-compose 관점에서 확인
docker-compose ps

# 포트 확인
ss -tlnp | grep :80

🔍 권한 문제 해결

/opt/harbor 디렉토리 권한 확인

# 현재 소유권 확인
ls -la /opt/ | grep harbor

# 사용자 소유권으로 변경 (필요시)
sudo chown -R $USER:$USER /opt/harbor

# Harbor 데이터 디렉토리 권한 확인
data_path=$(grep '^[^#]*data_volume:' /opt/harbor/harbor.yml | awk '{print $NF}')
echo "Data path: $data_path"
sudo mkdir -p $data_path
sudo chown -R $USER:$USER $data_path

🎯 Root 모드 vs 사용자 모드 비교

Root 모드 (현재)

# 소켓 위치
/run/podman/podman.sock

# DOCKER_HOST
unix:///run/podman/podman.sock

# 실행 방법
sudo -E docker-compose up -d

사용자 모드 (권장)

# 소켓 위치
/run/user/$UID/podman/podman.sock

# DOCKER_HOST  
unix:///run/user/$UID/podman/podman.sock

# 실행 방법
docker-compose up -d

🚨 즉시 확인해볼 명령어

# 현재 상태 진단
echo "=== 현재 Podman 소켓 상태 ==="
sudo systemctl is-active podman.socket
systemctl --user is-active podman.socket

echo "=== 현재 DOCKER_HOST ==="
echo $DOCKER_HOST

echo "=== 현재 Harbor 컨테이너 ==="
podman ps

echo "=== /opt/harbor 권한 ==="
ls -la /opt/ | grep harbor

권장: 방법 1 (사용자 레벨로 변경)을 사용하면 권한 문제 없이 Harbor를 정상적으로 실행할 수 있습니다!

profile
bytebliss

0개의 댓글