728x90
반응형
아니요. 다른 컨테이너가 “같은 이미지(mariadb:10.11)”를 쓰는 건 전혀 문제 아닙니다.
Docker는 이미지 1개로 컨테이너 여러 개 띄우는 게 정상이에요.
문제는 2가지가 섞여 있어요:
1) 이전 에러의 핵심: “이미지”가 아니라 “컨테이너 이름” 충돌
에러가 말한 건 이거였죠:
- 컨테이너 이름 /mariadb 가 이미 존재함 → 같은 이름으로 또 만들 수 없음
docker ps -a 보면 실제로 mariadb 라는 이름의 컨테이너가 이미 있어요.
✅ 해결 방식
- 기존 mariadb 컨테이너를 지우거나/이름 바꾸거나
- docker-compose.yml에서 container_name: mariadb 같은 걸 쓰고 있다면 그 줄을 제거(추천)
참고로 docker compose down은 기본적으로 이미지는 안 지웁니다. 네트워크/컨테이너만 내리는 거라 docker images에 남아있는 게 정상이에요.
2) 지금 새로 뜬 에러: invalid containerPort: 1330223306
이건 이미지/컨테이너 충돌이 아니라, compose 파일의 “포트 설정”이 잘못된 것입니다.
- 포트는 1~65535 범위여야 하는데,
- compose가 “컨테이너 포트(target)”를 1330223306으로 읽어버렸다는 뜻이에요.
- 보통 원인:
- ports:에 환경변수를 쓰는데 .env 값이 이상함
- ports: 문법을 YAML에서 잘못 써서 compose가 엉뚱하게 파싱함
- long syntax에서 target:에 잘못된 값이 들어감
바로 원인 찾는 1줄 명령 (강추)
아래를 실행하면 실제로 해석된 최종 compose 설정이 출력돼요. 여기서 1330223306이 어디서 나오는지 바로 보입니다.
docker compose config
그리고 포트 부분만 보고 싶으면:
docker compose config | sed -n '/ports:/,/environment:/p'
대부분 이렇게 고치면 해결됩니다 (예시)
mariadb는 보통 컨테이너 포트가 3306이라서:
services:
mariadb:
image: mariadb:10.11
ports:
- "3306:3306" # (호스트:컨테이너)
환경변수로 쓴다면 (값 없으면 3306 기본):
ports:
- "${MARIADB_PORT:-3306}:3306"
- 3306:3306 처럼 따옴표 없이 쓰면 YAML이 “문자열”이 아니라 “키:값 매핑”으로 오해할 수 있어서, 따옴표로 감싸는 걸 추천합니다.
.env 쓰고 있으면 이것도 확인
ls -al .env
cat .env | grep -i port
MARIADB_PORT=1330223306 같은 게 있으면 그게 범인입니다. 3306이나 3307 같은 정상 포트로 바꾸세요.
3) (선택) 기존 mariadb 컨테이너를 유지해야 한다면
이미 mariadb 컨테이너가 있으면, 새 프로젝트는 이름/포트를 바꿔서 공존시켜야 해요.
예)
- 호스트 포트를 3307로 바꿈:
ports:
- "3307:3306"
그리고 container_name은 되도록 제거(추천)하거나, 꼭 써야 하면 고유하게:
container_name: mariadb_te
728x90
반응형