개발 중 Alpine Linux
를 기반으로 한 Dockerfile을 작성하고 이미지를 빌드하던 중, 예상치 못한 SSL 인증 오류
와 패키지 설치 실패
문제가 발생했습니다. 본 글에서는 해당 오류가 발생한 배경과, 문제를 해결한 과정을 정리하여 공유드립니다.
문제 상황
Dockerfile 내에서 apk add
명령어를 통해 여러 패키지를 설치하려던 중, 다음과 같은 에러 메시지가 출력되었습니다.
ERROR: SSL routines:tls_process_server_certificate:certificate verify failed
ERROR: unable to select packages:
bash (no such package)
cargo (no such package)
g++ (no such package)
에러 로그를 좀 더 자세히 보면 아래와 같이 나타납니다:
fetch https://dl-cdn.alpinelinux.org/alpine/v3.20/main/x86_64/APKINDEX.tar.gz
error:0A000086:SSL routines:tls_process_server_certificate:certificate verify failed
WARNING: fetching ... Permission denied
ERROR: unable to select packages
이러한 오류는 apk
명령어가 https
를 통해 패키지 저장소에 접근하려다 SSL 인증서 검증에 실패하면서 발생한 것입니다. 인증 실패로 인해 APKINDEX를 불러오지 못했고, 그 결과로 필요한 패키지를 찾지 못했다는 메시지가 연이어 출력되었습니다.
원인 분석
문제를 정리해보면 다음과 같습니다.
- SSL 인증 오류
- Docker 환경 또는 Alpine 기본 이미지 상에서 SSL 인증서(
ca-certificates
)가 누락되어 있었거나, - 내부망 혹은 제한된 네트워크 환경에서 SSL 인증서를 검증할 수 없는 상황이었습니다.
- Docker 환경 또는 Alpine 기본 이미지 상에서 SSL 인증서(
- 패키지 설치 실패
- 인증 실패로 인해 패키지 인덱스를 가져오지 못하자,
apk add
명령어가 지정된 패키지를 찾지 못하고 실패하게 된 것입니다.
- 인증 실패로 인해 패키지 인덱스를 가져오지 못하자,
해결 방법
이 문제를 우선적으로 해결하기 위해, 저장소 주소의 https
를 http
로 변경하여 SSL 인증을 우회했습니다.
# 에러 해결을 위해 추가 (2025-05-26)
RUN sed 's/https/http/g' -i /etc/apk/repositories
RUN apk update
이후 필요한 패키지를 설치하는 apk add
명령어를 다시 수행했고, 정상적으로 작동함을 확인하였습니다.
RUN apk add --no-cache bash
RUN apk --no-cache add \
"bash~=5.2" \
"libpq" \
"libxslt" \
"nodejs-current" \
"xmlsec" \
"libffi-dev" \
"bash~=5.2" \
"g++" \
"gcc"
이전에는 bash
, cargo
, g++
등 일부 패키지가 "no such package"라는 오류를 출력하며 설치되지 않았는데, 저장소 접근 문제가 해결되자 이 문제도 함께 해결되었습니다.
정리
항목 | 내용 |
---|---|
오류 메시지 | certificate verify failed , no such package |
원인 | SSL 인증 실패로 패키지 저장소 접근 불가 |
조치 | /etc/apk/repositories 내 주소를 https → http 로 변경 |
결과 | apk update 및 apk add 가 정상 작동함 |
보안상의 유의사항
이번 해결은 빠르게 개발 환경에서 문제를 해결하기 위한 임시적 우회 방법입니다. 하지만 http
는 전송 중 데이터가 암호화되지 않기 때문에, 운영 환경에서는 반드시 https
를 사용하는 것이 바람직합니다.
보다 근본적인 해결책은 다음과 같습니다:
ca-certificates
패키지를 설치하여 인증서 문제 해결- 자체적으로 신뢰할 수 있는 사설 인증서(CA)를 시스템에 등록
- 내부 저장소 미러를 통한 보안된 패키지 제공
마무리하며
이와 같은 SSL 인증 관련 오류는 Alpine과 같은 경량 리눅스 이미지에서 종종 발생할 수 있습니다. Dockerfile을 구성할 때 환경에 따라 인증서 이슈를 사전에 고려하고, 보안과 편의 사이에서 적절한 균형을 찾는 것이 중요합니다.
개발 중 겪은 작은 시행착오가 다른 분들에게는 시간을 줄여주는 팁이 되길 바랍니다.
'개발 (Development) > Docker' 카테고리의 다른 글
[Docker] Docker 환경에서 yarn 설치 시 인증서 오류 해결 (0) | 2025.06.01 |
---|---|
[Docker] on-premise 환경에서 Docker Compose의 Build 문제 해결 (0) | 2025.06.01 |
[Docker] Docker 컨테이너 생성과 삭제 이력 추적하는 방법 (0) | 2025.04.26 |
[Docker] Dockerfile에서 chown이 동작하지 않을 때, 의외의 원인과 해결법 (0) | 2025.04.19 |
[Docker] Docker 로그 필터링 - grep 사용 시 문제와 해결 팁 (0) | 2024.12.30 |