我在 Docker 容器中安装 node_modules
并与主机同步时遇到了问题。我的多克的版本是 18.03.1-ce, build 9ee9f40
和多克作曲的版本是 1.21.2, build a133471
。
我的 docker-compose.yml
看起来像:
# Frontend Container.
frontend:
build: ./app/frontend
volumes:
- ./app/frontend:/usr/src/app
- frontend-node-modules:/usr/src/app/node_modules
ports:
- 3000:3000
environment:
NODE_ENV: ${ENV}
command: npm start
# Define all the external volumes.
volumes:
frontend-node-modules: ~
我的 Dockerfile
:
# Set the base image.
FROM node:10
# Create and define the working directory.
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
# Install the application's dependencies.
COPY package.json ./
COPY package-lock.json ./
RUN npm install
很多博客文章和 Stack Overflow 的回答都描述了外部卷的技巧。例如,这个。
应用程序工作良好。源代码是同步的。热重载工作也很好。
我唯一的问题是主机上的 node_modules
文件夹是空的。是否可以将 Docker 容器中的 node_modules
文件夹与主机同步?
我已经读过这些答案了:
不幸的是,他们帮不了我太多。我不喜欢 第一个,因为我不想在我的主机上运行 npm install
,因为它可能存在跨平台问题(例如,主机是 Windows 或 Mac,而 Docker 容器是 Debian 8或 Ubuntu 16.04)。第二个对我来说也不好,因为我想在我的 Dockerfile
中运行 npm install
,而不是在 Docker 容器启动后运行它。
还有,我找到了 这篇博文。作者试图解决我所面临的同样的问题。问题是 node_modules
无法同步,因为我们只是将它们从 Docker 容器复制到主机。
我希望 Docker 容器中的 node_modules
与主机同步。拜托,考虑到我想要的:
node_modules
而不是手动安装node_modules
安装在 Docker 容器内而不是主机内node_modules
与主机同步(如果我在 Docker 容器中安装了一些新的包,它应该自动与主机同步,而不需要任何手动操作)我需要主机上的 node_modules
,因为:
node_modules
,以便能够访问 devDependencies
,如 eslint
或 prettier
。我不想在全球范围内安装这些 devDependencies
。先谢谢你。