fix: docker-compose 빌드 오류 해결 가이드 및 자동화 스크립트 추가

- WSL2 Ubuntu에서 'image already exists' 오류 해결 문서 추가
- Linux/macOS용 build.sh 스크립트 추가 (BuildKit 비활성화)
- Windows PowerShell용 build.ps1 스크립트 추가
- 빌드 오류 트러블슈팅 가이드 추가
- docker-compose.yml에 빌드 오류 관련 주석 추가
- MODULES.md에 Docker 빌드 오류 해결 섹션 추가
This commit is contained in:
2025-12-31 11:48:29 +09:00
parent 53326703ab
commit f41599eef6
6 changed files with 591 additions and 0 deletions

137
scripts/build.sh Normal file
View File

@ -0,0 +1,137 @@
#!/bin/bash
# ###################################################################
# build.sh - FGTools Docker 이미지 빌드 스크립트
# ###################################################################
# 용도: WSL2 Ubuntu에서 docker-compose build 오류 해결
#
# 사용법:
# chmod +x scripts/build.sh
# ./scripts/build.sh # 기본 빌드
# ./scripts/build.sh clean # 캐시 무시하고 빌드
# ./scripts/build.sh force # 완전 초기화 후 빌드
# ./scripts/build.sh push # 빌드 및 푸시
# ###################################################################
set -e
REGISTRY="reg.firstgarden.co.kr"
IMAGE_NAME="fgtools:latest"
FULL_IMAGE="$REGISTRY/$IMAGE_NAME"
# 색상 정의
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 함수: 메시지 출력
log() {
echo -e "${GREEN}[FGTools Build]${NC} $1"
}
error() {
echo -e "${RED}[FGTools Build ERROR]${NC} $1"
}
warn() {
echo -e "${YELLOW}[FGTools Build WARN]${NC} $1"
}
# 함수: 기본 빌드
build_normal() {
log "도커 이미지 빌드 시작 (일반 모드)..."
export DOCKER_BUILDKIT=0
docker compose build
log "✓ 빌드 완료: $FULL_IMAGE"
}
# 함수: 캐시 무시 빌드
build_clean() {
log "도커 이미지 빌드 시작 (캐시 무시)..."
docker compose build --no-cache
log "✓ 빌드 완료: $FULL_IMAGE"
}
# 함수: 강제 초기화 후 빌드
build_force() {
log "완전 초기화 모드 시작..."
warn "서비스 중지 중..."
docker compose down || true
warn "이전 이미지 삭제 중..."
docker rmi "$FULL_IMAGE" || true
warn "BuildKit 캐시 정리 중..."
docker buildx prune -a --force || true
log "도커 이미지 빌드 시작..."
export DOCKER_BUILDKIT=0
docker compose build
log "✓ 빌드 완료: $FULL_IMAGE"
}
# 함수: 빌드 및 푸시
build_and_push() {
log "도커 이미지 빌드 및 푸시 시작..."
export DOCKER_BUILDKIT=0
docker compose build
log "이미지 푸시 중..."
docker compose push
log "✓ 빌드 및 푸시 완료: $FULL_IMAGE"
}
# 함수: 사용법 출력
usage() {
cat << EOF
사용법: ./scripts/build.sh [옵션]
옵션:
(기본값) 일반 빌드 (BuildKit 비활성화)
clean 캐시를 무시하고 빌드
force 완전 초기화 후 빌드 (강력함)
push 빌드 및 사설 레지스트리에 푸시
예시:
./scripts/build.sh # 기본 빌드
./scripts/build.sh clean # 캐시 제거 후 빌드
./scripts/build.sh force # 완전 초기화
./scripts/build.sh push # 빌드 및 푸시
트러블슈팅:
WSL2에서 "image already exists" 오류 발생 시:
1. 먼저 clean 모드 시도: ./scripts/build.sh clean
2. 실패 시 force 모드 시도: ./scripts/build.sh force
3. 계속 실패하면: docker system prune -a
EOF
}
# 메인 로직
case "${1:-default}" in
default)
build_normal
;;
clean)
build_clean
;;
force)
build_force
;;
push)
build_and_push
;;
help|--help|-h)
usage
;;
*)
error "알 수 없는 옵션: $1"
usage
exit 1
;;
esac
log "완료!"