如何调试 Node.js 应用程序 运行 Typescript Inside docker-compose with VSCode?

How to Debug Node.js Applications Running Typescript Inside docker-compose wtih VSCode?

目标

我的目标是能够在 VSCode 的帮助下在 docker 中调试多个 Node.js 服务 运行-compose。但也有一些挑战:

  1. ts-node-dev has no documentation for VSCode debugging. But since it is just a wrapper around ts-node (which has native support for VSCode dbugging) this should be possible with something like described 。还是我要调试的时候一定要用ts-node

  2. 如何调试 运行ning 在 Docker 容器中的代码?为此,我可能会做一些与 here 中描述的类似的事情。但是他们手动将 TYpescript 编译为 Javascript,我不想这样做。

  3. 如何协调多个服务?因为我有多项服务,我是否必须选择要调试的一项,还是可以一次为所有服务启动调试器?

项目

我用以下结构制作了一个小 sample project。在docker-compose.

中有两个服务(gateway和hello)运行ning
package.json
tsconfig.json
docker-compose.yaml
services
  hello
    index.ts
  gateway
    index.ts

宁运行后docker-compose up --build:

这是我用来在开发模式下启动项目的 docker-compose.yaml 文件。

version: "3"
services:
  gateway:
    image: node:lts-alpine
    working_dir: /
    volumes:
      - ./package.json:/package.json
      - ./tsconfig.json:/tsconfig.json
      - ./services/gateway:/services/gateway
      - ./node_modules:/node_modules
    command: yarn run ts-node-dev services/gateway
    ports:
      - 3000:3000

  hello:
    image: node:lts-alpine
    working_dir: /
    volumes:
      - ./package.json:/package.json
      - ./tsconfig.json:/tsconfig.json
      - ./services/hello:/services/hello
      - ./node_modules:/node_modules
    command: yarn run ts-node-dev services/hello

请注意,我使用 ts-node-dev 到 运行 服务,当检测到代码更改时,它会自动重新启动服务器,但如果需要,我愿意使用其他东西。

我制作了一个视频来解释如何进行这项工作。

https://odysee.com/@flolu:7/docker-typescript-debug:3?r=HFBL1PfaSVqKsaYbQDRH3GZZp78ch6CR

这是源代码:https://github.com/flolu/docker-typescript-debug