I try to start simple nodejs server inside Docker container and debug it with chrome://inspect or WebStorm. Debugging port 9229 is binded but inspection not works. On the other hand when I run same code without docker i can inspect it in chrome://inspect and in WebStorm both well.
Can anybody explain me why Chrome can't inspect nodejs code in Docker container???
Dockerfile
FROM node:8.2.1-alpine
WORKDIR /code
COPY package.json /code/package.json
RUN npm install && npm ls
RUN mv /code/node_modules /node_modules
COPY . /code
EXPOSE 8000
EXPOSE 9229
CMD ["npm", "run", "start"]
alexey@home:~/app$ docker run -p 9229:9229 -p 8000:8000 node-dev
npm info it worked if it ends with ok
npm info using npm@5.3.0
npm info using node@v8.2.1
npm info lifecycle @~prestart: @
npm info lifecycle @~start: @
> @ start /code
> node --inspect app
Debugger listening on ws://127.0.0.1:9229/5b225f7d-0e18-4ded-894b-a7993bb7da64
For help see https://nodejs.org/en/docs/inspector
HTTP server listening on port 8000
You need "node --inspect 0.0.0.0:8000" in container. Container port 8000 is mapped to host port 9229. So you must use localhost:9229 to connect chrome-dev-tools to node-debugger in container.
Details s. https://nodejs.org/en/docs/guides/debugging-getting-started/
in your package.json
scripts
:"debug": "nodemon --inspect=0.0.0.0:9229 index.js",
in your docker-compose.yaml:
services: service_name: command: npm run debug ports: - 9229:9229
I am not 100% sure on this but I think that mapping the debugger to run on 0.0.0.0 exposes it to your local network meaning that anyone can connect to your machine IP on port 9229 will be able to debug your nodejs server. Beware your nodejs server has access to the filesystem. So do not run production (or development) servers with this ever.