【发布时间】:2018-12-08 09:47:13
【问题描述】:
我在 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 的答案都描述了外部卷的技巧。例如,this one。
该应用程序运行良好。源代码是同步的。热重载也很好用。
我唯一的问题是主机上的node_modules 文件夹是空的。是否可以将Docker容器内的node_modules文件夹与主机同步?
我已经阅读了这些答案:
- docker-compose volume on node_modules but is empty
- Accessing node_modules after npm install inside Docker
不幸的是,他们并没有给我太多帮助。我不喜欢the first one,因为我不想在我的主机上运行npm install,因为可能存在跨平台问题(例如主机是Windows 或Mac,Docker 容器是Debian 8 或Ubuntu 16.04) . The second one 对我也不好,因为我想在我的 Dockerfile 中运行 npm install 而不是在 Docker 容器启动后运行它。
另外,我找到了this blog post。作者试图解决我面临的同样问题。问题是 node_modules 不会同步,因为我们只是将它们从 Docker 容器复制到主机。
我希望 Docker 容器内的 node_modules 与主机同步。请考虑我想要的:
- 自动安装
node_modules而不是手动安装 - 在 Docker 容器而不是主机中安装
node_modules - 让
node_modules与主机同步(如果我在Docker容器内安装了一些新包,它应该自动与主机同步,无需任何手动操作)
我需要在主机上有node_modules,因为:
- 可以在需要时阅读源代码
- IDE 需要在本地安装
node_modules,以便它可以访问devDependencies,例如eslint或prettier。我不想全局安装这些devDependencies。
提前致谢。
【问题讨论】:
标签: docker npm docker-compose node-modules