Как настроить WebStorm для отладки расширений Directus в докеризованной среде?

Я пытаюсь настроить конфигурации запуска/отладки в WebStorm для отладки расширений Directus. Directus работает внутри контейнера Docker, которым управляет docker-compose.yml. Несмотря на то, что я следую документации WebStorm, при запуске отладчика возникают ошибки.

Конфигурация WebStorm для контейнера Directus:

Конфигурация образа Docker для Directus:

FROM directus/directus:10.13
USER root
RUN corepack enable \
  && corepack prepare [email protected] --activate \
  # Currently required, we'll probably address this in the base image in future release
  && chown node:node /directus 

RUN mkdir -p /directus/directus-config
RUN chown -R node:node /directus/directus-config

ENV PNPM_HOME = "/pnpm"
ENV PATH = "$PNPM_HOME:$PATH"
RUN pnpm install -g tsx

USER node
RUN pnpm install directus-extension-sync
RUN pnpm install directus-sync

Конфигурация Docker Compose для Directus:

  jp_backend:
    container_name: ${COMPOSE_PROJECT_NAME}_jp_backend
    user: ${UID}:${GID}
    build:
      context: ./
      dockerfile: docker/backend/Dockerfile
    env_file:
      - .env
    ports:
      - '${DOCKER_BACKEND_PORT}:8055'
    volumes:
      - ./directus/extensions:/directus/extensions
      - ./directus/directus-config:/directus/directus-config
      - ./directus/start.ts:/directus/start.ts
      - ./directus/start.js:/directus/start.js
      - './.env:/directus/.env:ro'
      - ./docker/backend/.bash_history:/home/node/.ash_history
    networks:
      - backend_network
      - traefik_network
    depends_on:
      - jp_database
    labels:
      - 'traefik.enable=true'
      - 'traefik.http.routers.${COMPOSE_PROJECT_NAME}-backend.entrypoints=http'
      - 'traefik.http.routers.${COMPOSE_PROJECT_NAME}-backend.rule=Host(`${COMPOSE_PROJECT_NAME}.backend.${DOMAIN}`)'
      - 'traefik.http.middlewares.${COMPOSE_PROJECT_NAME}-backend-https-redirect.redirectscheme.scheme=https'
      - 'traefik.http.routers.${COMPOSE_PROJECT_NAME}-backend.middlewares=${COMPOSE_PROJECT_NAME}-backend-https-redirect'
      - 'traefik.http.routers.${COMPOSE_PROJECT_NAME}-backend-secure.entrypoints=https'
      - 'traefik.http.routers.${COMPOSE_PROJECT_NAME}-backend-secure.rule=Host(`${COMPOSE_PROJECT_NAME}.backend.${DOMAIN}`)'
      - 'traefik.http.routers.${COMPOSE_PROJECT_NAME}-backend-secure.tls=true'
      - 'traefik.http.routers.${COMPOSE_PROJECT_NAME}-backend-secure.tls.certresolver=http'
      - 'traefik.http.routers.${COMPOSE_PROJECT_NAME}-backend-secure.service=${COMPOSE_PROJECT_NAME}-backend'
      - 'traefik.http.services.${COMPOSE_PROJECT_NAME}-backend.loadbalancer.server.port=8055'
      - 'traefik.docker.network=traefik_network'

Когда я начинаю отладку, я получаю следующую ошибку:

tsx /directus/start.ts
WARN[0000] /home/happyhevia/JP/jobs-paragon-backend/docker-compose.yml: `version` is obsolete 
WARN[0000] /home/happyhevia/.cache/JetBrains/WebStorm2024.1/tmp/docker_compose/docker-compose.override.881.yml: `version` is obsolete 
[+] Running 2/0
 ✔ Container dev_jp_database  Running                                                                              0.0s 
 ✔ Container dev_jp_backend   Recreated                                                                            0.0s 
Attaching to dev_jp_backend
dev_jp_backend  | Debugger listening on ws://127.0.0.1:38727/ddbd5270-8cfe-4cd1-b203-8505e794968c
dev_jp_backend  | For help, see: https://nodejs.org/en/docs/inspector
dev_jp_backend  | [debugConnectionForwarder] Error connecting to inspector {"port":38727} Error: connect ECONNREFUSED ::1:38727
dev_jp_backend  |     at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1555:16) {
dev_jp_backend  |   errno: -111,
dev_jp_backend  |   code: 'ECONNREFUSED',
dev_jp_backend  |   syscall: 'connect',
dev_jp_backend  |   address: '::1',
dev_jp_backend  |   port: 38727
dev_jp_backend  | }

При запуске той же конфигурации без попыток отладки все работает правильно, и я могу получить доступ к панели управления Directus, как и ожидалось. Это означает, что настройка подходит для запуска, но что-то настроено неправильно или несовместимо для отладки.

Попытки решить проблему:

  • Начал проверку Node.js. Я попытался запустить проверку Node.js внутри контейнера, чтобы выявить проблему, но не получил четкого понимания.
  • Перешел на Node.js с tsx: использование Node.js вместо tsx для запуска стартового сценария не решило проблему.
  • Тестирование с использованием другого образа Node.js. Я настроил аналогичную настройку запуска/отладки, используя образ Node.js Alpine v20, где функция отладки работала без проблем. Это говорит о том, что может возникнуть конкретная проблема с образом Directus или его настройкой.
  • Просмотр образа Directus. Я подозреваю, что в образе Directus может быть что-то, что мешает правильному подключению отладчика, но я не уверен, что именно может быть причиной этой проблемы.

Я провел все выходные, пытаясь разобраться в этом, и был бы чрезвычайно благодарен за любые идеи или решения. Это особенно неприятно, поскольку установка выглядит корректной и работает нормально, но во время отладки происходит сбой.

Случайная мысль: проверьте IPv4 и IPv6.

LazyOne 08.07.2024 11:51

@LazyOne Огромное спасибо! Проблема действительно была связана с настройками порта. Я обнаружил, что WebStorm использует переменную среды JETBRAINS_NODE_BIND_HOST, значение которой по умолчанию равно 127.0.0.1. Установка JETBRAINS_NODE_BIND_HOST=::1 в конфигурации запуска/отладки полностью решила проблему.

Jérémie Esteves 08.07.2024 17:06

Большой! Пожалуйста, опубликуйте это как ответ (и примите его позже). Вопросы с принятыми ответами имеют гораздо лучшую видимость. Это поможет другим пользователям в аналогичной ситуации — они смогут ясно увидеть, что есть какое-то решение, и не нужно копаться в комментариях.

LazyOne 08.07.2024 19:31
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
3
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема была в настройках порта. WebStorm использует переменную среды JETBRAINS_NODE_BIND_HOST, которая по умолчанию равна 127.0.0.1. Изменение его на ::1 решило проблему.

Вот что нужно сделать:

  1. Перейдите в раздел «Выполнить» > «Редактировать конфигурации в WebStorm».
  2. Выберите свою конфигурацию.
  3. Добавьте переменную среды: JETBRAINS_NODE_BIND_HOST со значением ::1.

Спасибо @LazyOne за подсказку, которая привела к этому решению!

Другие вопросы по теме