Docker npm安装不';我不在码头工作

Docker npm安装不';我不在码头工作,docker,npm,Docker,Npm,这是我的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 WORK

这是我的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"]
当我构建映像时,npm install命令执行时几乎没有输出,而且速度非常快。实际上,我是通过docker compose构建的,docker compose安装了一个卷,我看不到在我的软管上创建的node_modules文件夹。当我在此图像上启动一个容器时,我可以看到没有node_modules文件夹。然后,我执行npm安装,一切开始工作——安装所有软件包需要2-3分钟,node_modules文件夹确实已创建


这里发生了什么?我做错了什么?为什么npm安装在生成时不起作用,但在运行时起作用?

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

docker-run-rm-it-DIRNAME\u节点ls-ahl/usr/src/app

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

如果您装载一个卷(通常在Linux中,也在Docker容器中),它将被装载。因此,您无法看到在构建步骤中创建的
节点\u模块


我建议您根据Docker映像本身进行测试,不要装载卷。然后您就有了一个更适合部署的方法。

同时复制源代码并运行npm安装意味着每当源代码发生更改时,npm安装步骤缓存都会变得无效

相反,像这样分离步骤/缓存

COPY package*.json ./
RUN npm install

在Windows 10上,我在这个问题中报告了相同的问题,经过一些研究,我发现了一个问题,以及解决问题的必要步骤

简而言之,主要问题是在安装向导期间,我选择了“Windows作为容器”选项

要解决此问题

1) 切换到Linux容器:在任务栏上,右键单击docker图标,然后单击下面显示的选项:

2) 在命令行上禁用“实验功能”:打开docker/settings并单击命令行:

3) 禁用配置文件上的实验设置::在docker/settings上,单击docker引擎并验证实验设置为false:

我在哪里找到解决方案的问题与我在尝试构建docker映像时遇到的另一个问题有关:。这两个问题都与同一个问题有关:第一次安装docker时,我选择了“windows作为容器”选项。
希望能有帮助。干杯

您提到了一个卷,但它没有显示在您包含的任何命令或文件中。请包括docker-compose.yml和显示错误的输出。