npm安装在Docker中不起作用

这是我的Dockerfile:

FROM node:7 RUN apt-get update && apt-get install -y --no-install-recommends \ rubygems build-essential ruby-dev \ && rm -rf /var/lib/apt/lists/* RUN npm install -gq gulp bower RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY . /usr/src/app RUN npm install CMD ["gulp", "start:dev"] 

当我构build映像时,npm install命令执行的输出很less,而且很快。 我实际上是通过docker-compose构build的,它有一个卷挂载 – 我看不到在我的软pipe上创build的node_modules文件夹。 当我在这个图像上启动容器时,我可以看到没有node_modules文件夹。 然后执行npm install,开始工作 – 安装所有软件包需要2-3分钟,并确实创build了node_modules文件夹。

这里发生了什么? 我究竟做错了什么? 为什么不在编译时安装npm,然后在运行时运行?

npm install应该基于你的Dockerfile 。 如果您运行没有安装卷的映像( DIRNAME :您docker-compose.yml所在的位置),则可以看到已创build的文件:

docker run --rm -it DIRNAME_node ls -ahl /usr/src/app

使用docker build ,所有的数据都存储在图像中。 所以,它的目的是看不到你的主机上创build的任何文件。

如果您安装一个卷(通常在Linux中,也在Docker容器中),它会覆盖目录 。 所以你看不到在构build步骤中创build的node_modules

我build议你根据Docker镜像本身进行testing,不要安装音量。 然后你有一个更好的部署的不可变的Docker镜像 。