首页 > 解决方案 > 从 Dockerfile 构建的 Docker 无限期挂起,偶尔会因错误“无法启动服务实用程序 VM”而崩溃

问题描述

我目前正在使用 Docker Desktop for Windows 并按照本教程使用 Docker 和 VSCode ( https://scotch.io/tutorials/docker-and-visual-studio-code ),当我尝试构建图像时,守护程序能够完成 Dockerfile 的第一步,但在第二步中无限期挂起。有时,但很少,在不确定的时间后,它会出错并给我这个错误

failed to start service utility VM (createreadwrite): CreateComputeSystem 97cb9905dbf6933f563d0337f8321c8cb71e543a242cddb0cb09dbbdbb68b006_svm: The operation could not be started because a required feature is not installed.
(extra info: {"SystemType":"container","Name":"97cb9905dbf6933f563d0337f8321c8cb71e543a242cddb0cb09dbbdbb68b006_svm","Layers":null,"HvPartition":true,"HvRuntime":{"ImagePath":"C:\\Program Files\\Linux Containers","LinuxInitrdFile":"initrd.img","LinuxKernelFile":"kernel"},"ContainerType":"linux","TerminateOnLastHandleClosed":true})

我已经确保在我的机器上启用了虚拟化,卸载并重新安装了 Docker,卸载了 Docker 并在重新安装之前删除了与其相关的所有文件,并确保启用了实验功能。这些是我在尝试查找遇到相同​​问题的其他人时从各种论坛中找到的修复程序。

这是我试图构建的 Dockerfile。我已经仔细检查了教程是否正确,尽管我仍然可能遗漏了一些东西(在 FROM 行中的版本号之外)。

FROM node:10.13-alpine
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm install --production --silent && mv node_modules ../
COPY . .
EXPOSE 3000
CMD npm start

我希望图像能够正确构建,因为我已经按照教程进行了 T。我什至完全重置并重新开始了教程,但我仍然遇到同样的问题,它无限期地挂起。

标签: node.jsdockernpmvisual-studio-codedockerfile

解决方案


好吧,你复制一些文件两次。我不会那样做。
因此,对于您的最小更改,Dockerfile我会尝试:

FROM node:10.13-alpine
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY . .
RUN npm install --production --silent && mv node_modules ../
EXPOSE 3000
CMD npm start

&& mv node_modules ../如果真的需要,我也会考虑这个部分。
如果你还没有这样做,我建议你在你.dockerignore旁边写一个文件Dockerfile,内容最少:

/node_modules

这样您的本地node_modules目录在构建映像时也不会被复制(节省时间)。

希望这可以帮助。


推荐阅读