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:
137
scripts/build.sh
Normal file
137
scripts/build.sh
Normal 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 "완료!"
|
||||
Reference in New Issue
Block a user