문제 상황
위의 아키텍처로 Jenkins의 파이프라인을 통해 Django를 도킹할 때 발생하는 문제입니다.
.
파이프라인에서 docker 컨테이너가 정상적으로 실행되고 있고, ec2에서 docker ps 명령을 통해 컨테이너가 정상적으로 실행되고 있음을 확인했습니다.
docker ps
//CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
//0bd7562d8edf image_name "python manage.py ru…" 2 hours ago Up 2 hours 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp
그러나 포트 8000을 통해 ec2의 공인 IP 주소에 액세스할 때 다음과 같은 문제가 발생했습니다.
분명히 Django는 정상적으로 실행되고 있는데 왜 연결할 수 없습니까?
해결
1. Django의 ALLOWED_HOSTS 설정
Django의 Settings.py로 이동하면 ALLOWED_HOSTS라는 항목이 있습니다.
외부에서 Django에 접근할 수 있는 권한을 설정하는 것입니다.
호스트를 지정하고 직접 입력하거나 “*”를 입력하여 모든 사용자에게 액세스를 허용할 수 있습니다.
ALLOWED_HOSTS = ('*')
또는
ALLOWED_HOSTS = ('특정 HOST IP')
2. 컨테이너 로그 확인
제 경우에는 이것이 문제를 해결했습니다.
ec2 환경에서 Docker logs “Container ID” 명령을 통해 백그라운드에서 실행되는 Django가 정상적으로 실행되는 것을 확인했는데, 실제로는 로컬에서 정상적으로 실행되는 Django가 실행되고 있지 않았습니다.
docker logs "컨테이너 ID"
원인은 requirements.txt에 누락된 모듈이 있었기 때문에 가져오는 동안 컴파일 오류가 발생했습니다.