pip 패키지 버전 고정 누락

Dockerfile에서 pip install 시 패키지 버전을 지정하지 않으면 빌드 시점에 따라 다른 라이브러리가 설치될 수 있습니다.

설명

pip install connexion처럼 버전 없이 Python 패키지를 설치하면, 패키지 저장소 변경에 따라 다른 버전이 내려올 수 있습니다. 셸 형식과 JSON exec 형식의 pip·pip3 install 모두에서 실제 패키지 인수의 버전을 고정해야 합니다.

Python 패키지는 하위 의존성이 많아 작은 업데이트도 동작 차이를 만들 수 있습니다. --index-url이나 --trusted-host 같은 옵션의 값과 URL은 패키지가 아니며, 이런 옵션을 사용하더라도 뒤에 오는 패키지는 package==version 형식으로 고정해야 합니다.

잠재적 영향

  • 빌드 시점마다 서로 다른 Python 패키지가 설치될 수 있습니다.
  • 의존성 변경으로 런타임 오류가 발생할 수 있습니다.
  • 테스트 환경과 운영 환경 사이에 라이브러리 차이가 생길 수 있습니다.

해결 방법

  • pip install connexion==3.1.0처럼 설치 버전을 명시하세요.
  • 여러 패키지를 설치할 때는 하위 의존성까지 검토한 requirements 파일과 고정 버전을 함께 관리하세요.
  • 버전 변경 시 애플리케이션 테스트 후에만 반영하세요.

예시

아래 버전은 고정 문법 예시이며 현재의 보안 권장 버전은 아닙니다. 베이스 이미지와 하위 의존성도 관리하고 보안 업데이트를 계속 반영하세요.

변경 전

dockerfile
FROM python:3.12-slim
RUN pip install connexion
RUN pip3 install requests

변경 후

dockerfile
FROM python:3.12-slim
RUN pip install --upgrade pip==24.2 connexion==3.1.0
RUN pip3 install --no-cache-dir requests==2.32.3

설명:

  • 변경 전: 설치 버전이 고정되지 않아 패키지 저장소 변경이 그대로 이미지에 반영될 수 있습니다.
  • 변경 후: == 형식으로 직접 설치할 버전을 지정합니다. 이 명령만으로 모든 하위 의존성까지 고정되지는 않습니다.

참조