O Docker é uma ferramenta incrível que empacota o código e todas as suas dependências para que a aplicação funcione de forma rápida e confiávl de um ambiente para outro. Porém, o processo de configuração dessa ferramenta é um pouco complexo, entretanto, nesse breve artigo você entenderá como pode facilmente debugar seu código NodeJS que está rodando em um servidor Docker.
Instalando extensão
Primeiramente você irá precisar ter instalado no seu VSCode a extensão do docker, essa extensão será importante, pois ela faz com que seu editor de código possa depurar uma aplicação dentro do Docker. Também nos permitirá gerir imagens e containers. Basta procurar por Docker na aba de extensões do seu VSCode e instalar.
Configurando
Dentro do seu docker-compose.yml você irá expor a porta 9229 que o debugger vai utilizar para inspecionar a aplicação.
ports: - "80:3000" - "5678:5678" - "9229:9229"
Caso você esteja rodando o seu código diretamente pelo terminal você deve adicionar -p 9229:9229 para o comando do docker-run.
Exemplo: docker run -d -p 80:3000 -p 9229:9229 node:15.0.1-alpine
Configurando o package.json
No comando que é utilizando para rodar o script é importante mostrar para qual porta o inspect deve observar, por padrão é a porta 127.0.0.1:9229, porém para o Docker será a 0.0.0.0:9229.
Exemplo: "ts-node-dev -r tsconfig-paths/register --inspect=0.0.0.0 --transpile-only --ignore-watch node_modules --respawn src/shared/infra/http/server.ts"
Configurando o launch.json
Depois de gerar o seu launch.json indo na aba do Debug e clicando na opção Adicionar configuração, o seu arquivo deverá ter as seguintes informações no array configurations:
{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "attach", "name": "Docker Debugger", "port": 9229, "address": "localhost", "remoteRoot": "/", "sourceMapPathOverrides": { "/usr/app/*": "${workspaceRoot}/*" }, "skipFiles": [ "<node_internals>/**/*.js" ] } ] }
Agora basta rodar o seu debbuger que ele vai conseguir inspecionar o seu código que está dentro do Docker.
Qualquer dúvida, dicas ou sugestões, não se esqueça de deixar nos comentário aqui em baixo.
Espero que tenha curtido 🤟