npm install 在 Docker 中不起作用

Jen*_*a S 8 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"]
Run Code Online (Sandbox Code Playgroud)

当我构建镜像时,npm install 命令的执行速度非常快,输出很少。我实际上是通过 docker-compose 构建它的,它确实安装了一个卷 - 而且我看不到在我的软管上创建的 node_modules 文件夹。当我在此映像上启动容器时,我可以看到没有 node_modules 文件夹。然后我执行 npm install ,一切开始工作 - 安装所有包需要 2-3 分钟,并且确实创建了 node_modules 文件夹。

这里发生了什么?我究竟做错了什么?为什么 npm install 在构建时不起作用,但在运行时起作用?

Dom*_*nik 5

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

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

使用 时docker build,所有数据都存储在图像中。因此,您不会看到在主机上创建的任何文件。

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

我建议您基于 Docker 映像本身进行测试,并且不要挂载卷。然后你就有了一个不可变的 Docker 镜像,它更适合部署。