You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

调试Docker容器内Directus扩展的WebStorm配置问题

我正尝试在WebStorm中配置运行/调试环境以调试Directus扩展,Directus运行在由docker-compose.yml管理的Docker容器内。尽管遵循了WebStorm文档,启动调试器时仍遇到错误。不启用调试时,相同配置运行正常,可正常访问Directus控制台,说明运行配置正确,但调试存在配置问题或兼容性问题。

WebStorm运行/调试配置

WebStorm中Directus容器的运行/调试配置

Docker镜像配置

FROM directus/directus:10.13
USER root
RUN corepack enable \
  && corepack prepare pnpm@8.1.1 --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配置

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调试启动状态

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  | }

已尝试的解决方法

  • 在容器内启动Node.js检查,未获得明确线索
  • 替换tsx为Node.js运行启动脚本,问题未解决
  • 测试Node.js Alpine v20镜像配置类似调试环境可正常工作,推测问题出在Directus镜像或其配置
  • 检查Directus镜像,怀疑存在阻止调试器连接的设置,但无法定位具体原因

解决思路建议

  1. 强制调试器监听所有接口
    错误显示调试器监听127.0.0.1,但WebStorm尝试连接::1(IPv6回环地址),可能容器内IPv6配置有问题。修改启动命令,添加--inspect=0.0.0.0:9229参数,让调试器监听所有网络接口,而非仅回环地址。比如在WebStorm的运行配置中,将命令改为tsx --inspect=0.0.0.0:9229 /directus/start.ts,同时在Docker Compose中映射调试端口9229:9229。

  2. 调整容器用户权限
    当前Docker Compose中指定了user: ${UID}:${GID},可能导致调试器无法绑定端口。尝试注释掉该行,使用镜像默认的node用户运行,确认是否是权限问题。

  3. 检查Directus启动逻辑
    Directus镜像可能有自定义的启动脚本,覆盖了调试参数。可以进入容器查看/directus/start.sh或相关启动脚本,确认是否有禁止调试或修改调试端口的逻辑。

  4. 使用WebStorm的远程调试配置
    放弃Docker Compose直接调试,改为手动启动容器并映射调试端口,然后在WebStorm中配置Remote Node.js Debug,指定容器的IP和调试端口(如9229)。

  5. 更新Directus镜像版本
    当前使用的是10.13版本,尝试升级到最新稳定版,可能官方已修复调试相关的兼容性问题。

内容的提问来源于stack exchange,提问作者Jérémie Esteves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 11:14:54