AWS ECS exec /usr/local/bin/docker-entrypoint.sh: exec 格式错误

问题描述 投票:0回答:2

我对这个 Docker 世界还很陌生,我正在尝试将图像(nodejs-typescript 服务)从 aws ECR 部署到 aws ECS,但是当我在集群内创建服务时,会出现此错误,并且任务永远不会运行:

exec /usr/local/bin/docker-entrypoint.sh: exec format error

我的 Dockerfile 如下所示:

FROM node:lts-alpine

WORKDIR /usr/app

COPY package*.json ./
COPY tsconfig*.json ./

RUN yarn install --quiet

RUN yarn global add pm2

COPY . .

RUN yarn build

CMD ["pm2-runtime", "build/src/localServer.js"]

当我构建图像并运行它时,它在我的电脑上运行良好:

(base) MacBook-Pro api % docker run -it -p 3000:3000 api-dev                                    
2022-12-06T15:35:27: PM2 log: Launching in no daemon mode
2022-12-06T15:35:27: PM2 log: App [localServer:0] starting in -fork mode-
2022-12-06T15:35:27: PM2 log: App [localServer:0] online
Connected to my_mongo_db_cluster
🚀  Server ready at: http://localhost:3000/

任务定义在Linux/X86_64上运行。

有什么建议或提示可以找出问题所在吗?谢谢!

编辑:当我像这样向我的 Dockerfile 添加入口点时

# same steps

COPY . .

RUN yarn build

ENTRYPOINT ["pm2-runtime", "build/src/localServer.js"]

它抛出这个错误

exec /usr/local/bin/pm2-runtime: exec format error
。当我将
pm2-runtime
更改为
node

时也会发生同样的情况
# same steps

COPY . .

RUN yarn build

ENTRYPOINT ["node", "build/src/localServer.js"]

希望有帮助。

node.js amazon-web-services docker amazon-ecs aws-fargate
2个回答
91
投票

我发现问题所在了。这是我的 Apple M1 芯片发挥了不兼容的魔力。对于那些有同样问题的人,只需在 Dockerfile 中添加平台

--platform=linux/amd64
似乎就可以解决问题:

FROM --platform=linux/amd64 node:lts-alpine

# more instructions...

0
投票

哇,这个小小的疏忽让我失去了面试的机会。无论如何很高兴知道。非常感谢您找到这个。

© www.soinside.com 2019 - 2024. All rights reserved.