Debugger

이정훈·2024년 8월 19일

Docker

목록 보기
26/34

로컬에서 개발을 하는 것처럼 컨테이너에서 개발을 하기 위해서는 디버거가 필요합니다.

NodeJS의 경우 내장된 디버거가 있습니다.
이를 사용하기 위해서는 --inspect 옵션을 사용하면 됩니다.
pacakage.json파일에 script에 아래와 같이 명령어를 작성하면
'npm run debug-docker'을 통해 내장된 디버거가 같이 실행됩니다.

 "debug-docker": "nodemon --inspect=0.0.0.0:9229 ./src/index.js",

참고로 0.0.0.0은 모든 네트워크에서 해당 애플리케이션에 대해 디버거로 접속 가능한 옵션이기 때문에 실제 사용할 때는 주의가 필요합니다.

docker-compose.yml파일에는 아래와 같이 작성하면 됩니다.

services:
  api-node:
    command:
      - "npm"
      - "run"
      - "debug-docker"
    ports:
      - "3000:3000"
      # inspect debug port
      - "9229:9229"

이렇게 하고 docker-compose.yml을 실행하면 디버거도 같이 실행됩니다.
대부분 디버깅용 파일과 개발 파일은 분리하기 때문에 아래와 같이 실행하면 디버깅이 가능합니다.

docker-compose -f docker-compose-dev.yml -f docker-compose-debug.yml up --build

VS 코드에서 디버거 설정하기

VS코드에서 원격으로 컨테이너에 디버깅을 할 수 있도록 만들 수 있습니다.
launch.json파일에 다음과 같이 설정하면 됩니다.

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Docker: Attach to Node",
      "type": "node",
      "request": "attach",
      "localRoot": "${workspaceFolder}/docker-course/devops-directive-docker-course/05-example-web-application/api-node",
      "remoteRoot": "/usr/src/app",
      "port": 9229
    },
    {
      "name": "Docker: Attach to Golang",
      "type": "go",
      "debugAdapter": "dlv-dap",
      "mode": "remote",
      "request": "attach",
      "port": 4000,
      "remotePath": "/app",
      "substitutePath": [
        {
          "from": "${workspaceFolder}/docker-course/devops-directive-docker-course/05-example-web-application/api-golang",
          "to": "/app"
        }
      ]
    }
  ]
}
profile
기록으로 흔적을 남깁니다.

0개의 댓글