개요
makepackage.bat의 REST API Docker 이미지 pull 단계에서 docker login이 401 Unauthorized로 실패하며 빌드가 중단되는 문제를 수정한다.
원인
echo %REGISTRY_PASSWORD% | docker login ... --password-stdin 줄에서 | 앞의 공백 때문에 cmd의 echo가 비밀번호 끝에 trailing space를 붙여 전달했다(<SECRET> ← 끝에 공백 1칸).
기존 Docker는 --password-stdin 입력의 뒤쪽 공백까지 트림해줘서 통과했으나, Docker Desktop 업데이트 이후 개행만 제거하고 trailing space는 비밀번호로 취급하게 바뀌면서 인증이 실패했다.
- 코드 자체는 변경 없음(git 확인).
- PowerShell 수동 실행이 성공한 이유: PowerShell
echo(=Write-Output)는 공백을 인자 구분자로 버리기 때문에 끝 공백 문제가 안 생긴다. → 수동 재현이 안 돼서 처음엔 환경 문제로 오인할 수 있었던 케이스.
수정
makepackage.bat의 다음 한 줄에서 파이프 앞 공백 제거:
:: 이전 (cmd echo가 trailing space 부착 → 신버전 docker 인증 실패)
echo %REGISTRY_PASSWORD% | docker login ...
:: 수정 (파이프 앞 공백 제거 — Docker 버전과 무관하게 안전)
echo %REGISTRY_PASSWORD%| docker login ...
변경 범위
makepackage.bat(1줄)
교훈
- cmd의
echo는 인자 사이 공백을 그대로 유지해 출력한다.|앞 공백 1칸이 출력 끝에 그대로 붙는다는 사실은 평소 안 보이는데, 뒤쪽이 트림되는 소비자(이전 Docker)에서 작동하다가 트림 정책이 바뀌면 그제야 드러난다. - PowerShell과 cmd의 echo 의미 차이도 함정. 한 셸에서 성공한다고 다른 셸에서도 같은 출력이 나오리라 가정하지 말 것.
- 비슷한 빌드/배포 스크립트에 같은 패턴(
echo VAR | cmd --password-stdin)이 있다면 일괄 점검 권장.
Orange Platform 빌드 스크립트 호환성 트러블슈팅 리포트입니다.