Debugging node inside of Docker
12 Sep 2018If your development setup is anything like mine, you’ll like to put all of your applications into their own containers so that they’re isolated from each other. This also gives me a little added guarantee that all of an application’s dependencies are wrapped up nicely before moving the code between environments.
Sometimes, debugging can be a little awkward if this is how you run. In today’s post, I’ll take you through debugging your node apps inside of a container.
Execution
The execution environment is quite simple. We’ll assume that a bash script allows us to start a container which holds our application, and injects any instruction to its console:
We’ll assume the following:
- Our application serves over port 3000
- Debugging will run on port 9229
- Our application gets mounted to
/usr/src/app
inside the container
Allowing inspection
Now we need to tell our node process that we want to inspect the process, and allow debugging. This is as simple as using the --inspect
switch with your node
or in my case nodemon
invocations. Here is my debug
run script inside of my package.json
:
This starts execution, mounting the debug port on 9229
(to align with our docker invocation); it’s also allowing connections from any remote computer to perform debugging. Handy.
Start debugging
Once you’ve issued ./run npm run debug
at the console, you’re ready to start debugging.
I use WebStorm for some projects, vim for others; and sometimes will use Chrome Dev Tools with chrome://inspect
to be able to see debugging information on screen.
Hope this helps you keep everything isolated; but integrated enough to debug!