해당 글을 docker-compose.yml 파일 경로를 수정했을 때 발생할 수 있는 문제점에 대해 공유하기 위해 작성하였습니다.
상황
먼저 제가 경험했던 에러 상황을 간단하게 공유하겠습니다.
docker-compose.yml 파일을 통해 여러 도커 컨테이너를 실행하고 있었습니다. 이때 도커 컴포즈 파일에서는 각 컨테이너의 볼륨, 네트워크 설정 등이 포함되어 있었죠. 이때 파일 정리를 위해 해당 docker-compose.yml 파일을 다른 디렉토리에 옮겼습니다. 그리고 도커 컨테이너들을 모두 삭제하고 다시 docker-compose up -d 명령어를 이용해 도커 컴포즈를 이용해 도커 컨네이들을 시작했습니다. 이때 문제가 발생합니다.
갑자기 도커 컨테이너 간 설정된 네트워크에 에러가 나서 도커 컨테이너 간 통신이 되지 않거나, 기존 볼륨 설정으로 도커 컨테이너를 종료해도 유지되어야했던 데이터가 모두 보이지 않습니다. 무엇이 문제일까요?
해결
핵심은 바로 docker-compose.yml 파일이 존재하는 디렉토리의 경로입니다.
저는 docker-compose.yml에서 볼륨이나 네트워크에 대한 이름을 지정하면 이 이름이 그대로 사용된다고 생각했었습니다. 예를 들어 docker-compose.yml에서 다음과 같은 컨테이너 설정을 했다고 가정합니다. 이는 해당 컨테이너의 network를 "test-network"라는 이름으로 지정하는 설정입니다.
services:
mysql:
container_name: mysql
... 생략 ...
networks:
- test-network
이때 해당 도커 컴포즈 파일을 이용해 띄운 도커 컨테이너를 띄우고, docker network ls 명령어를 통해 도커 네트워크 목록을 확인해봅니다. 저의 경우에는 이때 이상하게도 "test-network"라는 이름의 네트워크 대신 "ubuntu_test-network"라는 이름의 네트워크가 존재했습니다. 도대체 이 ubuntu라는 prefix는 어디서 붙은걸까요?
이 이름은 바로 도커 컴포즈가 위치한 디렉토리명에서 나옵니다. 저는 기존에 docker-compose.yml 파일이 서버의 /home/ubuntu 라는 경로 바로 아래에 위치하고 있었습니다. 이때 도커 컴포즈는 해당 docker-compose.yml 파일이 위치한 디렉토리를 프로젝트 경로로 인식하고 해당 디렉토리명을 사용하게됩니다. 그리고 프로젝트별로 충돌을 방지하기 위해 프로젝트명(docker-compose.yml 파일 위치한 디렉토리명)을 prefix로 사용하죠.
그래서 기존에는 "ubuntu_" 라는 이름(기존 docker-compose.yml 파일 위치한 디렉토리명)이 붙은 볼륨, 네트워크를 이용했고 docker-compose.yml 파일이 다른 디렉토리로 이동되고 나서는 이동된 디렉토리명이 prefix로 붙은 새로운 볼륨, 네트워크를 이용했기에 에러가 발생했던 것입니다.
마무리
도커 컴포즈를 사용할 때는 해당 컴포즈 파일이 위치한 디렉토리명을 prefix로 사용하기 때문에 도커 컴포즈 파일의 경로를 바꾸어가며 작업하면 에러가 발생할 수 있음을 인지해야합니다.
'데브옵스 > Docker' 카테고리의 다른 글
[Docker] docker-compose.yml 작성하기 (0) | 2025.04.16 |
---|---|
[Docker] Dockerfile에서 yarn install 에러 해결( .cache / unplugged 가 없다? ) (0) | 2025.01.20 |