← 전체 글로 돌아가기

Docker

Dockerfile을 안전하게 수정할 때 확인할 것

Dockerfile을 바꾼 후 배포했는데 컨테이너가 실행되지 않는다면, 로그부터 보고 환경 변수와 포트를 먼저 확인하자.

Dockerfile은 작은 변경이 큰 영향을 미친다. 로컬에서는 잘 동작하던 이미지도 배포 환경에서는 실패하기도 한다. 이런 문제를 빨리 찾으려면 체계적인 확인 순서가 필요하다.

컨테이너 로그 확인

docker logs --tail=100 service-name

컨테이너가 시작되지 않으면 처음 100줄이 대부분의 단서를 가지고 있다.

더 자세히 보려면:

docker logs -f service-name  # 실시간 로그

컨테이너 상태 확인

docker ps | grep service-name

상태가 Exited라면 컨테이너가 실행 직후 종료된 것이다. 로그를 봐야 원인을 찾을 수 있다.

환경 변수 확인

docker inspect service-name | grep -A 20 "Env"

Dockerfile의 ENV나 Docker Compose의 environment에서 설정한 변수들이 제대로 전달됐는지 본다.

필요한 환경 변수가 없으면:

docker run --env VAR_NAME=value ...

포트 매핑 확인

docker inspect service-name | grep -A 5 "Ports"

Dockerfile의 EXPOSE 포트와 Docker Compose의 ports 설정이 일치하는지 본다.

예를 들어 애플리케이션이 3000번 포트를 쓰면:

EXPOSE 3000

Docker Compose에서:

ports:
  - "3000:3000"

볼륨 마운트 확인

docker inspect service-name | grep -A 10 "Mounts"

Dockerfile의 VOLUME이나 Docker Compose의 volumes이 제대로 마운트됐는지 본다.

데이터가 저장되지 않거나 설정 파일이 로드되지 않으면 대부분 볼륨 문제다.

빌드 문제 확인

Dockerfile에서 의존성 설치 부분을 확인한다:

RUN npm install  # 또는 pip install, apt-get install 등

빌드 과정에서 실패하면 로그에 명확한 에러가 나온다. 로그를 다시 보자:

docker build --no-cache -t image-name .

빠른 테스트

문제를 빨리 찾으려면 간단한 테스트 컨테이너로 시작한다:

docker run -it --rm image-name /bin/sh

이렇게 하면 컨테이너 내부에서 직접 명령을 실행할 수 있다.

정리

  1. 컨테이너 로그 확인
  2. 상태 확인 (docker ps)
  3. 환경 변수 확인
  4. 포트 확인
  5. 볼륨 확인
  6. 필요하면 대화형 컨테이너로 직접 확인

이 순서를 따르면 대부분의 Docker 문제를 빨리 해결할 수 있다.