基于node:lts-alpine的Docker构建突然失效,如何恢复?
问题解决:Docker构建Angular项目时出现
/bin/sh: Unknown: not found错误 问题背景
Dockerfile内容如下:
FROM node:lts-alpine as node ARG STAGE='dev' ARG STAGEPATH='/dev' WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN $(npm bin)/ng build --configuration $STAGE --base-href=${STAGEPATH}/konnektor/
执行构建命令:
docker build --progress=plain --no-cache -t konnektor .
出现错误:
#14 [node 6/6] RUN $(npm bin)/ng build --configuration dev --base-href=/dev/konnektor/ #14 sha256:0d47aa4d98557f141c02bf395f4e2f6dd49e9cebe6dddad4ea4e5126da5016e7 #14 10.72 /bin/sh: Unknown: not found #14 ERROR: executor failed running [/bin/sh -c $(npm bin)/ng build --configuration $STAGE --base-href=${STAGEPATH}/konnektor/]: exit code: 127 ------> [node 6/6] RUN $(npm bin)/ng build --configuration dev --base-href=/dev/konnektor/:
此前构建正常,怀疑是node:lts-alpine镜像更新导致,无法获取旧版本镜像。
解决方案
方案1:替换$(npm bin)/ng为npx ng
修改Dockerfile中的RUN命令:
RUN npx ng build --configuration $STAGE --base-href=${STAGEPATH}/konnektor/
npx会自动寻找本地node_modules中的ng命令,避免npm bin输出路径在新镜像环境下的解析问题。
方案2:直接指定ng的绝对路径
直接使用node_modules下的ng可执行文件路径:
RUN ./node_modules/.bin/ng build --configuration $STAGE --base-href=${STAGEPATH}/konnektor/
方案3:锁定node镜像的具体版本
避免使用lts-alpine这种滚动标签,改用具体的LTS版本标签(比如当前Node.js 20为LTS版本):
FROM node:20-alpine as node
后续镜像更新不会自动切换版本,保持构建环境稳定。
内容的提问来源于stack exchange,提问作者Kolja
相关产品推荐
相关产品推荐

