我正在尝试在 WebStorm 中设置运行/调试配置来调试 Directus 扩展。 Directus 在 Docker 容器内运行,由 docker-compose.yml 管理。尽管遵循了 WebStorm 文档,但我在启动调试器时遇到了错误。
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'
当我开始调试时,我收到以下错误:
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 仪表板。这表明设置对于运行来说是正确的,但是某些配置错误或不兼容调试。
尝试解决问题:
我花了整个周末试图解决这个问题,并且非常感谢任何见解或解决方案。这尤其令人沮丧,因为设置看起来正确并且可以正常运行,但在调试过程中却失败了。
问题出在端口设置上。 WebStorm 使用
JETBRAINS_NODE_BIND_HOST
环境变量,默认为 127.0.0.1
。将其更改为 ::1
解决了问题。
这是要做的事情:
JETBRAINS_NODE_BIND_HOST
,值为 ::1
。感谢@LazyOne 提供的提示导致了此解决方案!