为什么我的 svelte 应用程序在本地主机上运行,而不是在 AWS Lightsail 上运行?

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

我有一个 Dockerized Svelte 应用程序,可以在本地计算机上完美运行,但在 AWS Lightsail 上部署它时遇到问题。这是我到目前为止所做的:

错误

Lightsail Error Message

日志

[3/Jul/2024:08:42:00] [deployment:1] Creating your deployment
[3/Jul/2024:08:42:13] exec /usr/local/bin/docker-entrypoint.sh: exec format error
[3/Jul/2024:08:43:02] [deployment:1] Started 1 new node
[3/Jul/2024:08:43:18] exec /usr/local/bin/docker-entrypoint.sh: exec format error
[3/Jul/2024:08:44:13] [deployment:1] Started 1 new node
[3/Jul/2024:08:44:22] exec /usr/local/bin/docker-entrypoint.sh: exec format error
[3/Jul/2024:08:45:27] [deployment:1] Started 1 new node
[3/Jul/2024:08:45:44] exec /usr/local/bin/docker-entrypoint.sh: exec format error
[3/Jul/2024:08:46:02] [deployment:1] Canceled

Lightsail 容器设置

  • 在 Lightsail 上创建容器服务。
  • 添加了一个包含以下详细信息的容器:
    • 容器名称:前端
    • 从 ECR 馈送图像
  • 设置公共端点以使用端口
    :3000

Lightsail container settings

Dockerfile

FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json .
RUN npm ci
COPY . .
RUN npm run build
RUN npm prune --production

FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/build build/
COPY --from=builder /app/node_modules node_modules/
COPY package.json .
EXPOSE 3000 # <--- I thought this would work
ENV NODE_ENV=production
CMD [ "node", "build" ]

Docker 桌面设置

当我在本地计算机上运行 docker 镜像时,它将正常工作。

如果我将端口更改为

localhost:3000
,我可以从 
localhost
:80

访问它

Docker desktop settings


Docker Desktop 使用 tcp,所以我认为这是我遇到此问题的原因,但我无法将

:3000
tcp 添加为公共端点。

更新

我使用 sveltekit 应用程序进行了测试,没有任何代码修改(Skelton 项目)。使用 Sveltkit dockerfile 设置参考。因此,我没有在 Lightsail 上设置任何环境变量。

node.js docker svelte amazon-lightsail
1个回答
0
投票

我尝试使用 Mext.js 并遇到了同样的问题。结果发现错误:

exec format error

通常在 Docker 镜像与主机之间存在架构不匹配时发生。如果 Docker 映像是为一种架构构建的(例如,

x86_64
)并且主机正在运行不同的架构(例如,
ARM64
),则可能会发生这种情况。

我的

MacOS
是 ARM64,而 Lightsail 基于
x86_64

✅ 我尝试使用我的 Ubuntu 构建相同的映像

x86_64
,一切都按我的预期工作。

我会等待接受答案,直到有人可以演示如何在

x86_64
机器上创建
ARM64
图像

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