docker compose --profile X down 이 전 서비스를 내린 이유
docker compose --profile sandbox down 은 sandbox 프로필 서비스만 내리지 않는다. 공식 문서대로 그 프로필 서비스에 더해 프로필이 없는 서비스까지 함께 내리고, 오류도 경고도 없다. 2026년 9월 이 한 줄에 리버스 프록시와 PostgreSQL·Redis 가 같이 내려갔고, 그 뒤로는 docker compose stop <서비스> 처럼 이름을 대서 내린다.
01 샌드박스를 걷어내다 프록시와 DB 까지 내려갔다
2026년 9월, AI 가 만든 코드를 실행하던 샌드박스 컨테이너 세 개를 정리하던 중이었다. 이 컨테이너들은 코어 인프라와 같은 compose 프로젝트에 sandbox 프로필로 묶여 있었다. 정리용 make 대상을 실행했고, 그 안에 든 명령은 이 한 줄이었다.
docker compose --profile sandbox down기대는 "샌드박스 컨테이너만 사라진다" 였다. 실제로는 같은 프로젝트의 리버스 프록시, PostgreSQL, MongoDB, Redis 가 전부 내려갔다. 서비스 컨테이너는 서비스마다 다른 compose 프로젝트라 이 명령의 대상이 아니었지만, 앞단 프록시와 DB 가 없으니 밖에서 보면 모든 사이트가 멈춘 것과 같았다. 곧바로 다시 올렸고 데이터는 잃지 않았다.
02 왜 --profile 을 줘도 down 은 전부 내리나
--profile 은 대상을 더하기만 하고 빼 주지는 않기 때문이다. 프로필이 붙은 서비스는 기본 명령에서 빠져 있다가 --profile X 를 주면 대상에 들어오고, 프로필이 없는 서비스는 언제나 대상이다. up 에서는 이것이 "X 도 올린다" 로 자연스럽게 읽힌다. 그런데 down 에서는 "X 도 내리고, 나머지도 내린다" 가 된다.
Docker 공식 문서도 이 동작을 적어 두었다. 프로필 안내 페이지의 "Stop application and services with specific profiles" 항목은 docker compose --profile debug down 이 debug 프로필 서비스와 프로필 없는 서비스를 함께 멈추고 지운다고 설명한다. 버그가 아니라 설계대로의 동작인 셈이다. 함정은 명령의 모양이 "그 프로필만" 처럼 읽힌다는 데 있다.
03 내리는 명령에는 서비스 이름을 댄다
서비스 하나만 내릴 때는 이름을 준다. 같은 문서가 권하는 방법은 docker compose down <서비스> 나 docker compose stop <서비스> 이고, 우리는 컨테이너까지 지우는 rm -sf 를 주로 쓴다. -s 는 지우기 전에 멈추고, -f 는 확인을 묻지 않는다.
docker compose stop grafana # 멈추기만 한다
docker compose rm -sf grafana # 멈추고 컨테이너를 지운다이 규칙은 운영 규칙의 불변식 목록에 넣었다. 그런데 사흘 뒤, 관측 스택을 내리는 다른 make 대상에도 같은 --profile obs down 이 들어 있는 것을 찾았다. 지금 그 대상은 프로필에만 속한 서비스 이름을 계산해서 그것만 지운다.
# --profile obs 를 줬을 때만 나타나는 서비스 = 관측 스택
obs=$(comm -13 <(docker compose config --services | sort) \
<(docker compose --profile obs config --services | sort))
docker compose --profile obs rm -sf $obs04 위험한 명령은 감싼 명령 안에 숨는다
"프로필은 대상을 더할 뿐 빼 주지 않는다" 한 줄을 기억하면 이 사고는 피한다. 따로 배운 것은 위험한 조합이 make 대상 같은 감싼 명령 안에 숨는다는 점이다. 사고는 대상 이름만 보고 실행해서 났고, 사흘 뒤 다른 대상에서 같은 조합을 또 찾았다. 그래서 금지 규칙을 하나 적으면 그 명령을 감싼 스크립트까지 한 번 훑는다. down 은 프로젝트를 접을 때만 쓰고, 볼륨까지 지우는 down -v 는 백업을 먼저 하고 무엇이 지워지는지 확인한 뒤에만 쓴다.
05 자주 묻는 질문
docker compose --profile X down 으로 그 프로필 서비스만 내릴 수 있나?
아니다. 그 프로필 서비스와 프로필 없는 서비스를 함께 내린다. 하나만 내리려면 docker compose stop <서비스> 나 rm -sf <서비스> 로 이름을 댄다.
이 동작은 Docker Compose 의 버그인가?
아니다. 공식 문서의 프로필 안내에 --profile debug down 이 프로필 서비스와 프로필 없는 서비스를 함께 멈추고 지운다고 적혀 있다.
프로필에 속한 서비스만 골라 내리려면?
docker compose config --services 를 프로필 없이 한 번, --profile 을 붙여 한 번 뽑아 차집합을 구한다. 그 이름만 rm -sf 로 지운다.
down -v 는 언제 써도 되나?
백업을 먼저 하고, 무엇이 지워지는지 확인한 뒤에만 쓴다. 볼륨까지 지우는 명령이라서다.