[Docker] Docker 환경에서 yarn 설치 시 인증서 오류 해결

2025. 6. 1. 01:28·개발 (Development)/Docker

문제 상황

사내망 환경에서 오픈소스 프로젝트를 Docker로 빌드하는 도중, 다음과 같은 명령어를 Dockerfile에 사용하게 되었습니다.

RUN yarn global add turbo

또는

RUN yarn install

하지만 빌드 중 다음과 같은 에러가 발생했습니다:

error Error: unable to verify the first certificate

또는

SSL Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE

이는 외부 레지스트리(https://registry.yarnpkg.com)에 접근할 때 TLS 인증서를 검증하지 못해 발생하는 오류입니다.

원인 분석

이 문제는 일반적으로 다음과 같은 내부망 환경에서 발생합니다.

  • 사내망에서 외부 인증서를 완전히 신뢰하지 않음
  • 외부 사이트의 인증서 체인(leaf → intermediate → root)을 검증할 수 없음
  • 사내 프록시를 통해 트래픽이 전달되며 인증서가 중간에 변경됨
  • Docker 컨테이너 내에서는 호스트 시스템의 인증서 체계를 공유하지 않음

해결 방법

1. TLS 인증서 검증 비활성화 (개발용 한정)

Dockerfile 내에 환경 변수를 추가하여 SSL 인증서 검증을 무시하도록 설정합니다.

ENV NODE_TLS_REJECT_UNAUTHORIZED=0
RUN yarn install

또는 yarn 설정 자체를 변경할 수도 있습니다.

RUN yarn config set "strict-ssl" false
RUN yarn install

주의: 이 방법은 보안상 매우 위험하므로 실제 운영 환경에서는 사용을 피해야 하며, 내부 테스트용으로만 사용해야 합니다.

2. 프록시 환경 변수 설정

사내에서 사용하는 HTTP(S) 프록시 서버가 있다면 아래와 같이 환경 변수를 설정합니다.

ENV http_proxy=http://proxy.company.com:8080
ENV https_proxy=http://proxy.company.com:8080
RUN yarn install

3. 사설 인증서를 Docker 컨테이너에 직접 등록

사내에서 사용하는 루트 인증서 파일(.crt 또는 .pem)을 Docker 이미지에 복사한 후 시스템에 등록하는 방식입니다.

COPY company-cert.pem /usr/local/share/ca-certificates/company-cert.crt
RUN update-ca-certificates
RUN yarn install

이 방법은 인증서 검증을 유지하면서도 보안 설정을 지킬 수 있어 가장 안정적입니다.

4. yarn 대신 npm 사용

특정 패키지 설치가 목적이라면 yarn 대신 npm을 사용하는 것도 고려할 수 있습니다.

RUN npm install -g turbo

상황에 따라 npm은 yarn보다 인증서 오류에 덜 민감하게 작동하기도 합니다.

적용 예시 요약

# 방법 1. 임시 개발용
ENV NODE_TLS_REJECT_UNAUTHORIZED=0
RUN yarn config set "strict-ssl" false
RUN yarn install

# 방법 2. 프록시 설정
# ENV http_proxy=http://proxy.company.com:8080
# ENV https_proxy=http://proxy.company.com:8080
# RUN yarn install

# 방법 3. 인증서 직접 등록
COPY company-cert.pem /usr/local/share/ca-certificates/company-cert.crt
RUN update-ca-certificates
RUN yarn install

마무리

사내 네트워크에서는 외부 인증서를 완전히 신뢰하지 않는 경우가 많아, yarn install 같은 기본적인 명령어도 인증서 오류로 실패할 수 있습니다. 이럴 때는 임시적인 우회 방법보다는 인증서를 등록하거나 프록시 설정을 적용하는 방식으로 문제를 해결하는 것이 더 바람직합니다.

반응형

'개발 (Development) > Docker' 카테고리의 다른 글

[Docker/Java] Java 기반 Docker 이미지에서 SQLite 관련 취약점 제거 방법 (CVE-2025-6965)  (4) 2025.08.15
[Docker] on-premise 환경에서 Docker Compose의 Build 문제 해결  (0) 2025.06.01
[Docker] Alpine 이미지 SSL 인증 오류 해결 (certificate verify failed)  (0) 2025.06.01
[Docker] Docker 컨테이너 생성과 삭제 이력 추적하는 방법  (0) 2025.04.26
[Docker] Dockerfile에서 chown이 동작하지 않을 때, 의외의 원인과 해결법  (0) 2025.04.19
'개발 (Development)/Docker' 카테고리의 다른 글
  • [Docker/Java] Java 기반 Docker 이미지에서 SQLite 관련 취약점 제거 방법 (CVE-2025-6965)
  • [Docker] on-premise 환경에서 Docker Compose의 Build 문제 해결
  • [Docker] Alpine 이미지 SSL 인증 오류 해결 (certificate verify failed)
  • [Docker] Docker 컨테이너 생성과 삭제 이력 추적하는 방법
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (231)
      • 개발 (Development) (165)
        • Algorithm (1)
        • Angular (1)
        • AWS (6)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (34)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (31)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (11)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Kubernetes
    MyBatis
    오답노트
    Spring boot
    백준
    ADsP
    Vue.js
    timescaledb
    javascript
    docker
    백준자바
    백준알고리즘
    리눅스 마스터 2급
    PostgreSQL
    springboot
    리눅스 마스터 2급 2차
    Linux master
    AWS
    java
    데이터분석
    python
    JSON
    백준온라인저지
    Linux
    pandas
    자바
    Kafka
    JPA
    deepseek
    DevOps
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Docker] Docker 환경에서 yarn 설치 시 인증서 오류 해결
상단으로

티스토리툴바