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:
162
scripts/build.ps1
Normal file
162
scripts/build.ps1
Normal file
@ -0,0 +1,162 @@
|
||||
# ###################################################################
|
||||
# build.ps1 - FGTools Docker 이미지 빌드 스크립트 (PowerShell)
|
||||
# ###################################################################
|
||||
# 용도: Windows/WSL2에서 docker-compose build 오류 해결
|
||||
#
|
||||
# 사용법:
|
||||
# Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||
# .\scripts\build.ps1 # 기본 빌드
|
||||
# .\scripts\build.ps1 -Clean # 캐시 무시하고 빌드
|
||||
# .\scripts\build.ps1 -Force # 완전 초기화 후 빌드
|
||||
# .\scripts\build.ps1 -Push # 빌드 및 푸시
|
||||
# ###################################################################
|
||||
|
||||
param(
|
||||
[switch]$Clean = $false,
|
||||
[switch]$Force = $false,
|
||||
[switch]$Push = $false,
|
||||
[switch]$Help = $false
|
||||
)
|
||||
|
||||
# 설정
|
||||
$REGISTRY = "reg.firstgarden.co.kr"
|
||||
$IMAGE_NAME = "fgtools:latest"
|
||||
$FULL_IMAGE = "$REGISTRY/$IMAGE_NAME"
|
||||
|
||||
# 함수: 메시지 출력
|
||||
function Write-Log {
|
||||
param([string]$Message)
|
||||
Write-Host "[FGTools Build] $Message" -ForegroundColor Green
|
||||
}
|
||||
|
||||
function Write-Error-Custom {
|
||||
param([string]$Message)
|
||||
Write-Host "[FGTools Build ERROR] $Message" -ForegroundColor Red
|
||||
}
|
||||
|
||||
function Write-Warn {
|
||||
param([string]$Message)
|
||||
Write-Host "[FGTools Build WARN] $Message" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
# 함수: 기본 빌드
|
||||
function Build-Normal {
|
||||
Write-Log "도커 이미지 빌드 시작 (일반 모드)..."
|
||||
$env:DOCKER_BUILDKIT = 0
|
||||
docker compose build
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Log "✓ 빌드 완료: $FULL_IMAGE"
|
||||
} else {
|
||||
Write-Error-Custom "빌드 실패"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# 함수: 캐시 무시 빌드
|
||||
function Build-Clean {
|
||||
Write-Log "도커 이미지 빌드 시작 (캐시 무시)..."
|
||||
docker compose build --no-cache
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Log "✓ 빌드 완료: $FULL_IMAGE"
|
||||
} else {
|
||||
Write-Error-Custom "빌드 실패"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# 함수: 강제 초기화 후 빌드
|
||||
function Build-Force {
|
||||
Write-Log "완전 초기화 모드 시작..."
|
||||
|
||||
Write-Warn "서비스 중지 중..."
|
||||
docker compose down 2>$null
|
||||
|
||||
Write-Warn "이전 이미지 삭제 중..."
|
||||
docker rmi $FULL_IMAGE 2>$null
|
||||
|
||||
Write-Warn "BuildKit 캐시 정리 중..."
|
||||
docker buildx prune -a --force 2>$null
|
||||
|
||||
Write-Log "도커 이미지 빌드 시작..."
|
||||
$env:DOCKER_BUILDKIT = 0
|
||||
docker compose build
|
||||
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Log "✓ 빌드 완료: $FULL_IMAGE"
|
||||
} else {
|
||||
Write-Error-Custom "빌드 실패"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# 함수: 빌드 및 푸시
|
||||
function Build-And-Push {
|
||||
Write-Log "도커 이미지 빌드 및 푸시 시작..."
|
||||
|
||||
$env:DOCKER_BUILDKIT = 0
|
||||
docker compose build
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Error-Custom "빌드 실패"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Log "이미지 푸시 중..."
|
||||
docker compose push
|
||||
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Log "✓ 빌드 및 푸시 완료: $FULL_IMAGE"
|
||||
} else {
|
||||
Write-Error-Custom "푸시 실패"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# 함수: 사용법 출력
|
||||
function Show-Usage {
|
||||
$usage = @"
|
||||
FGTools Docker 이미지 빌드 스크립트
|
||||
|
||||
사용법:
|
||||
.\scripts\build.ps1 # 기본 빌드
|
||||
.\scripts\build.ps1 -Clean # 캐시 무시하고 빌드
|
||||
.\scripts\build.ps1 -Force # 완전 초기화 후 빌드
|
||||
.\scripts\build.ps1 -Push # 빌드 및 푸시
|
||||
.\scripts\build.ps1 -Help # 이 메시지 출력
|
||||
|
||||
옵션:
|
||||
-Clean 캐시를 무시하고 빌드
|
||||
-Force 완전 초기화 후 빌드 (강력함)
|
||||
-Push 빌드 및 사설 레지스트리에 푸시
|
||||
-Help 도움말 출력
|
||||
|
||||
트러블슈팅:
|
||||
WSL2에서 "image already exists" 오류 발생 시:
|
||||
1. 먼저 clean 모드 시도: .\scripts\build.ps1 -Clean
|
||||
2. 실패 시 force 모드 시도: .\scripts\build.ps1 -Force
|
||||
3. 계속 실패하면: docker system prune -a
|
||||
|
||||
참고:
|
||||
처음 실행 시 실행 정책 변경 필요:
|
||||
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||
"@
|
||||
Write-Host $usage
|
||||
}
|
||||
|
||||
# 메인 로직
|
||||
if ($Help) {
|
||||
Show-Usage
|
||||
exit 0
|
||||
}
|
||||
|
||||
if ($Force) {
|
||||
Build-Force
|
||||
} elseif ($Clean) {
|
||||
Build-Clean
|
||||
} elseif ($Push) {
|
||||
Build-And-Push
|
||||
} else {
|
||||
Build-Normal
|
||||
}
|
||||
|
||||
Write-Log "완료!"
|
||||
Reference in New Issue
Block a user