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

Docker运行Node.js镜像时出现/bin/sh:1:{node,: not found错误求助

排查Docker运行Node.js应用时的/bin/sh: 1: {node,: not found错误

问题1:CMD命令格式解析异常

你遇到的/bin/sh: 1: {node,: not found报错,核心原因是Dockerfile中CMD指令的格式被错误识别成了shell命令而非JSON数组。当Docker以shell模式执行CMD时,错误的语法结构(比如误写大括号{}或引号格式错误)会触发该提示。

修正方案

确保Dockerfile中的CMD使用标准JSON数组格式(英文引号、中括号):

FROM node:14

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

EXPOSE 3000

CMD ["node", "app.mjs"]

修改后重新构建镜像:

docker build -t your-image-name .

问题2:顶层await的兼容性问题

你的app.mjs中使用了顶层await,但Node.js 14.0~14.7版本里顶层await属于实验特性,需手动开启;即使是14.8+版本,直接使用也存在兼容性风险。

修正方案

将顶层await封装到async函数中,避免依赖实验特性:

import express from 'express';
import connectToDatabase from './helpers.mjs';

const app = express();

app.get('/', (req, res) => {
  res.send('<h2>Hi there!</h2>');
});

// 将启动逻辑封装到async函数
async function startServer() {
  await connectToDatabase();
  app.listen(3000, () => {
    console.log('Server running on port 3000');
  });
}

startServer();

如果坚持使用顶层await,需修改Dockerfile的CMD添加实验性参数:

CMD ["node", "--experimental-top-level-await", "app.mjs"]

额外检查项

  • 确认package.json中已声明express依赖:
    {
      "dependencies": {
        "express": "^4.18.2"
      }
    }
    
  • 运行容器时映射正确端口:
    docker run -p 3000:3000 your-image-name
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:40:22