Docker 관련 문제
Docker 환경에서 발생하는 문제와 해결 방법입니다.
컨테이너 시작 실패
포트 충돌
증상:
Error response from daemon: driver failed programming external connectivity:
Bind for 0.0.0.0:8080 failed: port is already allocated
해결 방법:
-
사용 중인 포트 확인
# Linux/Mac
lsof -i :8080
# 또는
netstat -tlnp | grep 8080 -
다른 포트 사용
# .env에서 포트 변경
APP_PORT=8081 -
충돌 프로세스 종료
kill -9 $(lsof -t -i:8080)
이미지 빌드 실패
증상:
failed to solve: failed to compute cache key: failed to calculate checksum
해결 방법:
-
Docker 캐시 정리
docker builder prune -
빌드 캐시 없이 재빌드
docker compose build --no-cache -
시스템 정리
docker system prune -a
컨테이너가 바로 종료됨
증상:
Container myapp-web exited with code 1
원인 파악:
# 로그 확인
docker logs myapp-web
# 마지막 종료 상태 확인
docker inspect myapp-web --format='{{.State.ExitCode}}'
일반적인 원인:
| Exit Code | 원인 | 해결 방법 |
|---|---|---|
| 0 | 정상 종료 | 서비스 설정 확인 |
| 1 | 애플리케이션 오류 | 로그 확인 |
| 137 | OOM (메모리 부족) | 메모리 제한 증가 |
| 139 | Segmentation fault | 이미지 재빌드 |
네트워크 문제
컨테이너 간 통신 실패
증상:
cURL error 7: Failed to connect to postgres port 5432: Connection refused
확인 및 해결:
-
네트워크 확인
docker network ls
docker network inspect myapp-network -
컨테이너가 같은 네트워크에 있는지 확인
docker inspect myapp-web --format='{{json .NetworkSettings.Networks}}' -
서비스 이름으로 접근
# .env에서
DB_HOST=postgres # 컨테이너 이름 사용 (localhost 아님)
REDIS_HOST=redis # 컨테이너 이름 사용