본문 바로가기
Docker

[Docker] Docker Compose -p 옵션

by dbs_ 2025. 6. 18.

 

 

도커 컴포즈로 여러 개의 컨테이너를 띄우다가 충돌이 발생했다. 분명 둘 다 다른 이미지들을 사용하고, 다른 디렉터리 안에서 구성되는데 A를 켜면 B가 꺼지고, B를 켜면 A가 종료되었다.

이유를 찾아보며 그 원인을 정리해 보았다.

 

docker-compose 프로젝트

  • 기본적으로 docker-compose는 프로젝트 단위로 동작한다.
  • 여기서 말하는 프로젝트는 컨테이너, 네트워크, 볼륨 이름을 묶어 관리하는 단위

 

기본 동작 방식

  • docker-compose는 디폴트로 현재 디렉토리명을 프로젝트 이름으로 사용한다.
cd /home/labs/jenkins/workspace/TEST/docker-compose/
docker-compose up -d
  • 네트워크 : docker-compose_default
  • 볼륨 : docker-compose_postgres-volume
  • 컨테이너 : docker-compose_tomcat

 

근데 위에서 언급한 충돌이 발생한 까닭은 아래와 같은 경우이다.

# 1
cd /home/labs/jenkins/workspace/TEST/docker-compose/
docker-compose up -d

# 2
cd /home/labs/jenkins/workspace/TEST-2/docker-compose/
docker-compose up -d

TEST, TEST-2로 나뉜 디렉터리이지만 docker-compose 파일이 존재하는 상위 디렉터리는 docker-compose로 동일해서, 결론적으로는 두 환경에서 동일한 이름이 만들어져 충돌이 나게 된다.

 

-p 옵션의 역할

  • 아래처럼 -p로 프로젝트 이름을 직접 지정하면, 아래처럼 모든 내부 자원에 접두사가 바뀐다.
docker-compose -p test_dev up -d
docker-compose -p test_qa up -d
  • 네트워크 : test_dev_default, test_qa_default
  • 볼륨 : test_dev_postgres-volume, test_qa_postgres-volume
  • 컨테이너 : test_dev_tomcat, test_qa_tomcat

이렇게 하면 서로 완전히 격리된 환경이 되기 때문에, 동시에 띄워도 충돌이 나지 않는다.

 

정리하자면, -p 옵션을 사용하여 생성되는 컨테이너, 네트워크, 볼륨 이름에 고유 prefix 부여하여 충돌을 막을 수 있다. 이번처럼 CI/CD, Jenkins, 또는 로컬 테스트 환경을 여러 개 띄우는 구조에서는 -p 옵션을 써야 안정적일 것이다.