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

EC2型ECS部署React Docker容器报错:exec /docker-entrypoint.sh格式错误

解决ECS EC2实例上Docker容器报“exec /docker-entrypoint.sh: exec format error”的问题

核心原因分析

这个报错通常和以下两点相关:

  • 容器架构与EC2实例架构不匹配(比如容器是amd64,EC2是ARM架构的Graviton实例)
  • Nginx Alpine镜像默认的/docker-entrypoint.sh脚本执行环境不兼容

解决方案

方案1:绕过默认Entrypoint,直接启动Nginx

Nginx的默认entrypoint脚本主要用于处理配置模板等场景,如果你不需要这些功能,可以直接覆盖entrypoint,跳过/docker-entrypoint.sh的调用:

修改你的Dockerfile的production阶段,添加ENTRYPOINT []来清空默认entrypoint,保留原CMD即可:

FROM nginx:1.21.0-alpine as production

ENV NODE_ENV production

COPY --from=builder /app/build /usr/share/nginx/html
COPY nginx/nginx.conf /etc/nginx/conf.d/default.conf

EXPOSE 80

# 清空默认entrypoint,直接执行nginx命令
ENTRYPOINT []
CMD ["nginx", "-g", "daemon off;"]

重新构建镜像后部署到ECS EC2实例即可。

方案2:替换默认的entrypoint脚本

如果你需要保留Nginx entrypoint的功能,可以手动复制官方脚本并修正执行头:

  1. 本地创建docker-entrypoint.sh文件,复制官方nginx:1.21.0-alpine的entrypoint脚本内容,确保开头的shebang是#!/bin/sh(Alpine默认用ash shell,兼容sh)
  2. 在Dockerfile的production阶段添加以下指令:
# 复制自定义的entrypoint脚本
COPY docker-entrypoint.sh /docker-entrypoint.sh
# 添加执行权限
RUN chmod +x /docker-entrypoint.sh

方案3:构建多架构镜像适配EC2实例

如果你的EC2实例是ARM架构(比如Graviton 2/3),而当前镜像是amd64架构,会导致兼容问题。可以构建支持amd64和arm64的多架构镜像:

  1. 修改Dockerfile,移除builder阶段的--platform=linux/x86_64指定:
FROM node:16-alpine AS builder

WORKDIR /app

COPY package.json .
COPY package-lock.json .

RUN npm install --production

COPY . .

RUN npm run build
  1. 使用Docker Buildx构建多架构镜像并推送:
docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 -t your-image-repo/your-image:tag --push .

这样ECS会根据EC2实例的架构自动拉取对应版本的镜像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:40:31