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

162
scripts/build.ps1 Normal file
View 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 "완료!"