Jost Do It.

그냥 IT해.

서버 및 환경/Utils

[Docker] 스크립트 변경 내용이 컨테이너에 적용되지 않을 때

그냥하Jo. 2024. 10. 28. 10:26
반응형

1. 개요

도커 컴포즈를 통해 컨테이너를 실행하는 환경에서 일부 서비스의 스크립트 내용이 변경돼 컨테이너를 재실행하였다.

docker compose down
docker compose up

하지만 변경된 스크립트 내용들이 컨테이너에 반영되지 않고, 여전히 이전 스크립트 내용으로 실행되는걸 확인하였다.

 

아래 명령어로 이미지를 재빌드를 해도 변경된 스크립트 내용은 반영되지 않았다.

docker compose build --no-cache

 

2. 원인

도커는 이미지를 생성하고, 그 이미지를 통해 컨테이너를 실행한다.

그리고 컨테이너를 재실행하면 기존 이미지를 재사용해 컨테이너를 다시 생성한다.

도커의 이미지 목록은 다음 명령어로 확인할 수 있다.

docker image ls

 

 

만약 기존 서비스 내용들에서 변경이 생긴다면 docker compose build 명령을 통해 이미지를 재생성할 수 있는데, 이 명령어를 사용해도 일부 중간 이미지들은 재사용하는걸로 보인다.

특히 스크립트를 컨테이너에 COPY하는 이미지가 재사용되는 경우 스크립트의 변경내용이 컨테이너에 반영되지 않는다.

그래서 이미지 빌드를 새로해도 변경된 스크립트 내용이 적용되지 않는걸로 보인다.

 

3. 해결 방법

해결 방법은 두가지가 있는걸로 보이며, 내 경우는 첫번째로 해결하였음.

 

1) 생성된 image 제거

이 경우 아래 명령어로 빌드된 이미지를 제거하고 다시 생성하면 스크립트 변경 내용이 반영된다.

docker rmi {이미지명}

 

docker compose로 생성되는 이미지는 보통 레포명-레포명으로 생성된다.

 

 

2) 기존 컨테이너의 volume 제거

stackoverflow에서는 종료된 컨테이너의 volume을 재사용해서 그렇다고 한다.

아래 명령어처럼 컨테이너를 내릴 때 볼륨도 같이 삭제해주면 된다고 함

docker compose down -v

 

해결되는지 확인은 안해봤음..

 

반응형