MacOS下docker build提示已安装的make、npm等命令找不到如何解决
Docker构建提示命令不存在问题解决方法
问题本质
Docker构建过程中所有RUN指令执行的命令都运行在容器内部的独立系统环境中,和宿主机(你的Mac)本地安装的软件完全无关。你使用的基础镜像ubuntu:20.04默认不预装make、nodejs、npm等工具,因此会直接报命令不存在的错误。
解决步骤
- 调整Dockerfile,在执行业务构建命令前先安装所需依赖:
ubuntu系统安装软件前需要先更新源,同时配置非交互环境变量避免构建过程中出现时区选择等交互提示导致卡住,修改后的构建命令如下:% docker build -<<EOF # syntax=docker/dockerfile:1 FROM ubuntu:20.04 # 配置非交互环境,避免apt安装过程卡住 ENV DEBIAN_FRONTEND=noninteractive # 安装构建和运行需要的所有依赖 RUN apt update && apt install -y make nodejs npm COPY . /app RUN make /app CMD node /app/index.js EOF - 检查本地工作目录的Makefile是否存在:
你本地执行/bin/sh -c make /app提示无Makefile,是因为本地根目录不存在/app路径和对应构建文件,你需要确保执行docker build命令的当前工作目录下存在正确的Makefile,COPY . /app指令会把当前目录下的所有文件复制到容器内的/app路径下,缺少Makefile会在安装完make后仍报相同的找不到构建文件错误。 - 若仍有命令不存在的报错,可手动进入基础镜像验证依赖安装逻辑:
执行docker run --rm -it ubuntu:20.04 bash进入容器交互终端,手动执行apt安装命令,验证make、npm、node等命令是否可以正常调用,排查安装命令是否有拼写错误、源是否可用等问题。
补充说明
如果对Node.js版本有明确要求,ubuntu默认源的Node版本可能不符合需求,可以替换为对应版本的Node官方基础镜像(比如FROM node:18),不需要再手动安装node和npm,只需要安装make即可,构建效率更高。
内容的提问来源于stack exchange,提问作者rothkko
相关产品推荐
相关产品推荐

