You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Docker镜像时yarn无法使用,报错/bin/sh: [yarn,: not found

Docker运行报错:/bin/sh: [yarn,: not found 解决思路

问题重现

用户提供的Dockerfile如下:

FROM node:20-alpine3.20

WORKDIR /app

... a lot of unrelated stuff...

COPY package.json yarn.lock .yarnrc.yml .yarn/ ./

RUN corepack enable

RUN yarn install 

COPY . .

RUN yarn deploy

EXPOSE 3000

CMD ["yarn", "start"]

镜像构建成功,但运行容器时触发错误:/bin/sh: [yarn,: not found。已尝试切换非Alpine版本Node镜像、更换不同Node.js版本,改用npx也出现相同错误。package.json中配置了"packageManager": "yarn@4.7.0"。

错误原因

这个报错本质是Docker没有以exec模式执行CMD的数组指令,反而把整个数组当作参数传给了shell进程,shell会把[yarn,当成要执行的命令,自然找不到。大概率是镜像的ENTRYPOINT被修改(比如基础镜像自带或构建过程中添加了ENTRYPOINT),导致CMD的数组格式被shell解析而非直接执行。

解决方法

  • 强制使用exec模式执行:如果存在默认ENTRYPOINT干扰,先清空ENTRYPOINT再执行CMD:

    ENTRYPOINT []
    CMD ["yarn", "start"]
    

    或者直接用exec命令明确指定执行方式:

    CMD ["exec", "yarn", "start"]
    
  • 使用shell模式替代数组格式:放弃数组格式,改用shell命令串,避免解析问题:

    CMD yarn start
    

    或者如果需要先执行corepack激活(部分环境可能运行时失效):

    CMD sh -c "corepack enable && yarn start"
    
  • 使用yarn绝对路径执行:先在构建阶段确认yarn的路径,比如添加RUN which yarn查看,假设路径是/usr/local/bin/yarn,则CMD改为:

    CMD ["/usr/local/bin/yarn", "start"]
    

内容的提问来源于stack exchange,提问作者ayitinya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:24:57