Цель
Моя цель — иметь возможность отлаживать несколько сервисов Node.js, работающих в docker-compose, с помощью VSCode. Но есть некоторые проблемы:
ts-node-dev не содержит документации по отладке VSCode. Но поскольку это просто оболочка вокруг ts-node (который имеет встроенную поддержку отладки VSCode) это должно быть возможно с чем-то вроде описанного здесь. Или мне нужно использовать
ts-node
, когда я хочу отладить?Как отлаживать код, работающий внутри контейнера Docker? Для этой цели я мог бы сделать что-то подобное, как описано здесь. Но они компилируют TYpescript в Javascript вручную, чего я не хочу делать.
Как координировать несколько услуг? Поскольку у меня есть несколько служб, нужно ли мне выбирать, какую из них я хочу отладить, или можно запустить отладчик для всех служб одновременно?
Проект
Я сделал небольшой пример проекта со следующей структурой. В docker-compose работают две службы (шлюз и привет).
package.json
tsconfig.json
docker-compose.yaml
services
hello
index.ts
gateway
index.ts
После запуска docker-compose up --build
:
- http://localhost:3000 — шлюз отвечает напрямую
- http://localhost:3000/hello — шлюз отправляет ответ от службы приветствия
Вот 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
для запуска служб, которые автоматически перезапускают серверы при обнаружении изменения в коде, но я бы хотел использовать что-то еще, если это необходимо.