我在 Docker 容器内安装 node_modules
并将其与主机同步的过程中遇到了问题。我的 Docker 版本是 18.03.1-ce, build 9ee9f40
,Docker Compose 的版本是 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
文件夹与主机同步?我已经阅读了以下答案:
1. docker-compose volume on node_modules but is empty 2. Accessing node_modules after npm install inside Docker 不幸的是,它们并没有给我带来太大帮助。我不喜欢第一个答案,因为我不想在主机上运行
npm install
,因为可能会出现跨平台问题(例如,主机是Windows或Mac,而Docker容器是Debian 8或Ubuntu 16.04)。第二个答案对我来说也不好,因为我想在Dockerfile
中运行npm install
,而不是在Docker容器启动后运行它。此外,我发现这篇博客文章。作者试图解决我面临的同样的问题。问题在于
node_modules
不会被同步,因为我们只是将它们从Docker容器复制到主机上。我希望我的Docker容器内部的
node_modules
与主机同步。请注意,我希望:- 自动安装
node_modules
而不是手动安装。
- 在Docker容器内安装node_modules
而不是在主机上安装。
- 将node_modules
与主机同步(如果我在Docker容器中安装了一些新的包,则应该自动将其与主机同步,无需任何手动操作)。我需要在主机上拥有
node_modules
,因为:- 我需要时可以阅读源代码 - IDE需要本地安装
node_modules
,以便可以访问devDependencies
,如eslint
或prettier
。我不想全局安装这些devDependencies
。
rsync -arv /home/app/node_modules /tmp/node_modules
- Joseph Siefersentrypoint.sh
转换成 Unix 格式。 - jcarloswebCOPY package*.json ./
来替代将复制package-lock.json
和package.json
分为两行的操作,因为这样可以同时涵盖两个文件或其中任意一个文件。 - m4rlo