vscode를 이용한 docker-compose 환경에서 django 프로젝트 debugging 가이드
작성일: 20240715
작성자: @김동우
.env
SECRET_KEY =
DB_SCHEMA=
DB_USER=
DB_PASSWORD=
DB_WRITE_HOST=db
DB_PORT=5432
docker-compose.debug.yml
version: "3.8"
services:
db:
image: postgres:14.5
container_name: db
ports:
- "5432:5432"
restart: always
volumes:
- ./postgres:/var/lib/postgresql/data
env_file:
- .env
environment:
POSTGRES_USER:
POSTGRES_PASSWORD:
POSTGRES_DB:
api:
restart: always
container_name: custom
build: .
command: ["sh", "-c", "pip install debugpy -t /tmp && python /tmp/debugpy --wait-for-client --listen 0.0.0.0:5678 manage.py runserver 0.0.0.0:8000 --nothreading --noreload"]
# command: python manage.py runserver 0.0.0.0:80
working_dir: /usr/src/app/
ports:
- 5678:5678
- 8000:8000
volumes:
- ./:/usr/src/app/
env_file:
- .env
```
.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Python 디버거: 원격 연결",
"type": "debugpy",
"request": "attach",
"connect": {
"host": "localhost",
"port": 5678
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}/",
"remoteRoot": "/usr/src/app/"
}
]
}
]
}
docker-compose 로 실행된 django 프로젝트를 vscode의 디버거로 실행하여 호출스택, 지역변수, 중단점 등을 확인할 수 있다.
.env
.env 파일의 host명이 docker-compose.debug.yml 파일의 container_name과 같도록 한다.
docker-compose.debug.yml
공식문서를 참고하여 기존 docker-compose command와 container_name을 변경한다.
.vscode/launch.json
docker-compose -f docker-compose.debug.yml up
docker-compose.debug.yml 파일 기준으로 docker-compose 실행
docker kill backend-debug
container_name이 backend_debug인 컨테이너 종료
docker-compose -f docker-compose.debug.yml up -d --no-deps backend-debug
docker-compose.debug.yml 파일 기준으로 container_name이 backend_debug인 컨테이너만 실행
터미널에서 docker-compose -f docker-compose.debug.yml up
vscode에서 디버깅 시작 (ctrl + shift + D
)
디버그 콘솔에서 django 실행 확인
중단점 표시 후 디버깅
변수, 호출스택 확인 및 디버그 콘솔에서 코드실행 가능
코드 진행 중 에러 발생시에도 확인 가능
코드 수정 후)
docker kill backend-debug
docker-compose -f docker-compose.debug.yml up -d --no-deps backend-debug
https://code.visualstudio.com/docs/python/tutorial-django
https://code.visualstudio.com/docs/containers/docker-compose