我有一个 Dockerized Svelte 应用程序,可以在本地计算机上完美运行,但在 AWS Lightsail 上部署它时遇到问题。这是我到目前为止所做的:
[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
:3000
。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 镜像时,它将正常工作。
如果我将端口更改为
localhost:3000
,我可以从
localhost
或
:80
访问它
Docker Desktop 使用 tcp,所以我认为这是我遇到此问题的原因,但我无法将
:3000
tcp 添加为公共端点。
我使用 sveltekit 应用程序进行了测试,没有任何代码修改(Skelton 项目)。使用 Sveltkit dockerfile 设置参考。因此,我没有在 Lightsail 上设置任何环境变量。
我尝试使用 Mext.js 并遇到了同样的问题。结果发现错误:
exec format error
通常在 Docker 镜像与主机之间存在架构不匹配时发生。如果 Docker 映像是为一种架构构建的(例如,
x86_64
)并且主机正在运行不同的架构(例如,ARM64
),则可能会发生这种情况。
我的
MacOS
是 ARM64,而 Lightsail 基于 x86_64
。
✅ 我尝试使用我的 Ubuntu 构建相同的映像
x86_64
,一切都按我的预期工作。
我会等待接受答案,直到有人可以演示如何在
x86_64
机器上创建ARM64
图像。