Docker执行build构建镜像失败,停在COPY . .步骤的原因及修复方法
问题原因
- 构建上下文冗余文件过多:你当前执行构建的
D:\Code\testing\Docker\test1目录如果已经本地执行过npm install,会生成包含数万小文件的node_modules文件夹。执行COPY . .时,Docker默认会把当前目录下所有文件传输给守护进程,文件量过大会导致进程卡住,看似步骤停止。 - 对Dockerfile指令认知偏差:
CMD是容器启动指令,不属于镜像构建阶段会执行的指令,只要构建过程没有抛出错误,走完COPY、ENV、EXPOSE步骤就已经完成镜像构建,不需要在构建输出中看到CMD相关执行记录。 - 补充说明:你怀疑的
WORKDIR /app路径不存在的问题不成立,Docker执行WORKDIR时如果指定路径不存在,会自动创建对应目录,不会引发故障。
修复方案
- 新增
.dockerignore文件:在D:\Code\testing\Docker\test1目录下新建名为.dockerignore的文件,写入以下内容:
node_modules npm-debug.log .git .DS_Store *.log
该配置会让Docker构建时忽略非必要文件,大幅降低构建上下文的体积。
- 清理冗余文件:检查工作目录下是否有其他大体积非必要文件(如压缩包、缓存文件等),可直接删除或添加到
.dockerignore的忽略列表中。 - 重新执行构建命令:配置完成后执行原构建命令即可:
docker build -t <你的Docker ID>/firstapp:1.1 .
- 验证构建结果:命令执行完成无报错的话,执行
docker images即可看到构建完成的镜像,后续使用docker run启动容器时会自动执行CMD指定的npm start命令。
内容的提问来源于stack exchange,提问作者Pro Poop
相关产品推荐
相关产品推荐

