docker - 创建 Docker 自己的 node_modules

我是 Docker 的新手。我有一个项目设置如下:

app/
dist/
node_modules/       
package.json
Dockerfile           
docker-compose.yml  
.dockerignore        

文件
FROM node:10.16.2

WORKDIR /app

RUN sed -i '/jessie-updates/d' /etc/apt/sources.list

RUN apt-get update
RUN rm -rf /var/lib/apt/lists/*
RUN npm install --quiet
RUN npm install -g gulp

EXPOSE 3000

docker-compose.yml
version: '2'

services:
  web:
    build: .
    command: gulp
    ports:
      - "3000:3000"
    volumes:
      - .:/app
  package:
    build: .
    command: ./package.sh
    volumes:
      - ./package:/app/package

.dockerignore
# add git-ignore syntax here of things you don't want copied into docker image

.git
*Dockerfile*
*docker-compose*
package-lock.json
node_modules/

当我跑 docker-compose build --no-cache web && docker-compose up web ,其实是不是 创建自己的 node_modules但是使用本地系统的。我想要 docker 自己的 node_modules当我运行 docker 时。请帮忙。

我明白,我正在将所有文件从本地复制到 docker 设置,但我想排除 node_modules 并让它安装自己的 node_modules。

最佳答案

您正在安装一个主机卷,即您的项目文件夹到您的容器中

volumes:
      - .:/app

所以,当你做类似 WORKDIR /app 的事情时,您正在将 Dockerfile 所在的工作目录映射到容器中的/app,因此您实际上位于主机上的项目文件夹中,而不是副本中。您再次在主机上运行 npm install 。如果您修改该文件夹(应用程序)内的任何内容,更改将直接写入主机。

.dockerignore 在这里不起作用。构建镜像时,Docker 将复制镜像内 Dockerfile 所在的工作目录(构建上下文)的内容。这是一个自动过程,您不必这样做 自己 .所以这就是为什么你会使用 .dockerignore,这样你就可以在构建过程中排除文件和目录的复制。

当您的主机上有您希望在容器中提供的数据(读/写访问 - 它是可配置的,附加 :ro 将使其成为只读)时,您安装卷。请注意,卷应用于 容器在运行时。 .dockerignore 仅在构建 时使用图片 .更多关于 volumes .

https://stackoverflow.com/questions/57512490/

相关文章:

visual-c++ - cxcore210d.dll丢失

opencv - 使用OpenCV进行镜头检测

opencv - 投影仪和 OpenCV

python - 录像逻辑错误-fps

visual-c++ - 使用卷积方法处理35 x 35内核

opencv - 模拟相机的进纸

docker - 如何在 Docker API 中使用挂载创建容器

python - 在 Python 2.7 (Ubuntu/Windows XP) 上无法识别 Op

visual-studio - 使用Visual Studio的OpenCV中的链接器错误

python - 如果测试失败,则停止/失败 docker build