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
이렇게 하면 컨테이너 내부에서 직접 명령을 실행할 수 있다.
정리
- 컨테이너 로그 확인
- 상태 확인 (
docker ps) - 환경 변수 확인
- 포트 확인
- 볼륨 확인
- 필요하면 대화형 컨테이너로 직접 확인
이 순서를 따르면 대부분의 Docker 문제를 빨리 해결할 수 있다.