← 전체 글로 돌아가기

Docker

서버에서만 이미지가 깨질 때 컨테이너부터 본다

로컬에선 멀쩡한데 배포하면 이미지가 안 뜨는 문제. 컨테이너 안을 직접 들여다보며 잡은 과정이다.

로컬에서는 이미지가 잘 보이는데 컨테이너로 배포하면 깨지는 일이 있었다. 이런 "서버에서만" 류는 코드보다 환경 차이가 원인인 경우가 대부분이라, 나는 컨테이너 안을 먼저 들여다본다.

컨테이너 상태부터 확인한다

docker ps
docker logs --tail=100 service-name
docker inspect service-name

docker ps로 컨테이너가 떠 있는지, logs로 이미지 요청에서 404나 권한 에러가 찍히는지 본다. 정적 파일이 404라면 십중팔구 빌드 결과에 파일이 안 들어갔거나 경로가 어긋난 것이다.

빌드 결과에 파일이 들어갔는지 본다

가장 흔한 원인이 이거였다. 로컬 public/에는 있는데 도커 이미지 빌드 단계에서 복사가 빠진 경우다. 컨테이너 안에 직접 들어가 확인하면 확실하다.

docker exec -it service-name sh
ls -la /app/public/images

여기서 파일이 없으면 Dockerfile의 COPY 범위나 .dockerignore를 의심한다.

경로 대소문자도 본다

로컬은 보통 macOS라 대소문자를 구분하지 않지만, 리눅스 컨테이너는 구분한다. Logo.pnglogo.png로 불러오면 로컬에선 되고 서버에선 깨진다. 이 한 글자 때문에 한참 헤맨 적이 있어서, 이제는 파일명을 제일 먼저 의심한다.