本地NodeJS开发的Docker

在我的笔记本电脑file system上有可能具有node_modules时,在容器中本地开发应用程序的正确方法是什么?

目前我在Dockerfile有以下settings

 COPY package.json /app/ RUN npm install COPY . /app/ 

而下面的docker-compose

  volumes: - "/app/node_modules" 

在这种情况下,我可以在容器中运行npm命令, package.json中的更改反映在我的本地源代码树中。 哪个好。 但有一件事是缺less的:我没有本地node_modules文件夹,这意味着我的IDE不能看到这些文件。

不知何故可以解决吗?

您可以将所有本地环境复制到容器中:

 COPY ./package.json /app/package.json WORKDIR /app/ RUN npm install COPY ./src/ /app/src/ CMD ["npm","run","start"] 

这种方法将字面上复制您的本地环境的形象。 每次你会改变你的来源 – 你将不得不重build图像,并重新启动容器。

我build议你把你的项目文件夹作为一个卷装载到容器中 – 具有所有依赖关系,并且每个源/依赖项的更改都需要重新启动容器(或者可以在容器中使用一个主pipe):

 VOLUME /app/ WORKDIR /app/ CMD ["npm","run","start"] 

运行容器时 – 记得将你的项目目录连接到容器:

docker-compose.yml文件

 version: '2' services: app: build: . image: app volumes: [".:/app/"] 

(我认为你的Node.js应用程序的node_modules和sources, node_modulesdocker-compose.yml在同一个目录docker-compose.yml


编辑:上面贴出的解决scheme是有利于本地开发。 如果你想dockerize和部署你的应用程序有两种方法:

将您的本地node_modules和所有源复制到容器中:

 COPY ./node_modules /app/ COPY ./src /app/ COPY ./package.json /app/ WORKDIR /app/ CMD ["npm","run","start"] 

或者从我的答案顶部使用模板 (它将在构build过程中安装所有node_modules – 当package.json发生更改时),此构build会变慢。