如何告诉WebStorm在Docker容器中查找项目?

如何告诉WebStorm在Docker容器中查找项目?,webstorm,Webstorm,我的当前项目目录如下所示: 。 ├── 后端 │   ├── Dockerfile#NestJS Dockerfile。 │   ├── docker#包含docker-compose.yml文件的文件夹。 │   ├── package.json │   └── src └── 前端 ├── Dockerfile#角度Dockerfile。 ├── package.json └── src 我的docker compose.yml文件如下所示: version: "3.7" services

我的当前项目目录如下所示:

。
├── 后端
│   ├── Dockerfile#NestJS Dockerfile。
│   ├── docker#包含docker-compose.yml文件的文件夹。
│   ├── package.json
│   └── src
└── 前端
├── Dockerfile#角度Dockerfile。
├── package.json
└── src
我的
docker compose.yml
文件如下所示:

version: "3.7"
services:
  # ########################
  # Back-End Container
  # ########################
  backend: # Node-Express backend that acts as an API.
    container_name: nest_backend
    build:
      context: ../
    restart: always
    expose:
      - 3000
    ports:
      - "3000:3000"
    volumes:
      - /home/node/node_modules
      - "../:/home/node/"
  # ########################
  # Front-End Container
  # ########################
  frontend: # Angular frontend to be served to client.
    container_name: angular_frontend
    build:
      context: ../../frontend/
    restart: always
    expose:
      - 4200 # Angular ng-serve port.
      - 49153 # Websocket port for live reloading.
    ports:
      - "49153:49153"
      - "4200:4200"
    volumes:
      - /home/node/node_modules
      - "../../frontend/:/home/node/"
    depends_on:
      - backend
networks:
  default:

我希望使用Docker,并且不会失去使用WebStorm作为IDE的好处。例如,它告诉我没有安装tslint包,我需要运行
npm install
来安装
node\u modules
文件夹。但是,我的
节点\u模块
文件夹仅存在于容器中。有没有一种方法可以让WebStorm正常工作

我知道有一种叫做路径映射的东西,我试着配置它,但什么也没发生;它仍然告诉我安装软件包

以下是我迄今为止所做的工作:

我遵循了教程:

  • 转到窗口右上角调试按钮旁边的编辑配置
  • 单击+符号并选择节点.js
  • 单击节点解释器旁边的
  • 单击+符号,选择添加远程…
  • 从单选按钮中选择Docker Compose,单击配置文件旁边的文件夹图标,并从下拉菜单中选择相应的服务
  • 在所有内容上单击“确定”,然后运行它。它将运行,并给出一个未找到命令的错误
当我运行
docker compose up
时,一切运行都很顺利。当我试图添加运行配置
run>Edit Configurations…
以添加(+)一个
Docker compose
run,将其指向
Docker compose.yml
文件时,它也能顺利工作

我希望在Docker中使用IDE的特性。目前,它不知道在何处查找
tslint
配置或
node\u模块

TLDR

诀窍是将docker容器内的路径从
/your path
更新为
/opt/project

详细解决方案

webstorm的问题是,它们不允许您定义可以从中拾取
节点\u模块的路径。但他们有一个默认路径,从中选择它。当我想为docker内部运行的后端节点服务集成远程调试时,我也面临同样的问题

您需要更新docker文件。假设您使用的Dockerfile是这样的

# pull official base image
FROM node:12.11-buster

# set working directory
WORKDIR /app

COPY ./package.json ./package-lock.json /app

RUN npm install

# pull official base image
FROM node:12.11-buster

# set working directory
# This done particularly for enabling debugging in webstorm.
WORKDIR /opt/project

COPY ./package.json ./package-lock.json ./.npmrc /opt/project

RUN npm install

现在,这将不会检测用于远程调试或webstorm中需要的任何其他集成的node_模块

但是如果您将dockerfile更新为类似的内容

# pull official base image
FROM node:12.11-buster

# set working directory
WORKDIR /app

COPY ./package.json ./package-lock.json /app

RUN npm install

# pull official base image
FROM node:12.11-buster

# set working directory
# This done particularly for enabling debugging in webstorm.
WORKDIR /opt/project

COPY ./package.json ./package-lock.json ./.npmrc /opt/project

RUN npm install

然后webstorm就能够像预期的那样检测到一切

诀窍是将路径从
/your path
更新为
/opt/project

docker compose文件应如下所示:

version: "3.7"
services:
  backend-service:
    build:
      dockerfile: ./Dockerfile.local
      context: ./
    command: nodemon app.js
    volumes:
      - ./:/opt/project
      - /opt/project/node_modules/
    ports:
      - 6060:6060
    

你可以在

中了解更多关于这一点的信息。你在yaharga找到解决方案了吗?还没有。如果你找到解决办法,请告诉我。我最后做的是编写一个入口点脚本,在项目中安装节点模块,然后分别为每个文件夹挂载一个卷,这样节点模块就不会干扰卷挂载(挂载时它会变空的问题)。是的,我找到了一个解决我搜索的问题的方法。这与你正在做的有点不同,但它应该在@yaharga中起同样的作用