如何配置 WebStorm 以在 Docker 化环境中调试 Directus 扩展?

问题描述 投票:0回答:1

我正在尝试在 WebStorm 中设置运行/调试配置来调试 Directus 扩展。 Directus 在 Docker 容器内运行,由 docker-compose.yml 管理。尽管遵循了 WebStorm 文档,但我在启动调试器时遇到了错误。

Directus 容器的 WebStorm 配置: webstorm run/debug configuration for directus container

Directus 的 Docker 镜像配置:

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

Directus 的 Docker Compose 配置:

  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'

当我开始调试时,我收到以下错误:

webstorm debug is on

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 检查以识别问题,但没有收到任何明确的见解。
  • 从 tsx 切换到 Node.js:使用 Node.js 而不是 tsx 运行启动脚本并没有解决问题。
  • 使用不同的 Node.js 映像进行测试:我使用 Node.js Alpine v20 映像配置了类似的运行/调试设置,其中调试功能可以正常工作。这表明 Directus 映像或其配置可能存在特定问题。
  • 查看 Directus 映像:我怀疑 Directus 映像中可能存在某些内容,导致调试器无法正确连接,但我不确定具体是什么原因导致此问题。

我花了整个周末试图解决这个问题,并且非常感谢任何见解或解决方案。这尤其令人沮丧,因为设置看起来正确并且可以正常运行,但在调试过程中却失败了。

docker debugging webstorm directus
1个回答
0
投票

问题出在端口设置上。 WebStorm 使用

JETBRAINS_NODE_BIND_HOST
环境变量,默认为
127.0.0.1
。将其更改为
::1
解决了问题。

这是要做的事情:

  1. 转到 WebStorm 中的“运行”>“编辑配置”。
  2. 选择您的配置。
  3. 添加环境变量:
    JETBRAINS_NODE_BIND_HOST
    ,值为
    ::1

感谢@LazyOne 提供的提示导致了此解决方案!

© www.soinside.com 2019 - 2024. All rights reserved.