Почему мое приложение svelte работает на локальном хосте, а НЕ на AWS Lightsail?

У меня есть приложение 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

Настройки контейнера Lightsail

  • Создал контейнерный сервис на Lightsail.
  • Добавлен контейнер со следующими деталями:
    • Имя контейнера: интерфейс
    • фид Изображение из ECR
  • Установите ПУБЛИЧНУЮ КОНЕЧНУЮ ТОЧКУ на использование порта :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

Когда я запускаю образ Docker на локальном компьютере, он работает без каких-либо проблем.

Я смогу получить к нему доступ с localhost:3000 или localhost, если сменю порт на :80


Docker Desktop использует TCP, поэтому я подумал, что это причина, по которой у меня возникла эта проблема, но я не могу добавить :3000 tcp в качестве общедоступной конечной точки.

Обновлять

Я тестировал приложение sveltekit без каких-либо изменений кода (проект Skelton). С Справочником по настройке файла докеров Sveltkit. Итак, у меня не было установлено никакой переменной env в Lightsail.

🤔 А знаете ли вы, что...
Node.js позволяет выполнять JavaScript на стороне сервера, а не только в браузере.


1
74
1

Ответ:

Решено

Я попробовал использовать Mext.js и столкнулся с той же проблемой. Оказывается, ошибка:

exec format error

обычно происходит, когда существует несоответствие архитектуры между образом Docker и хост-компьютером. Это может произойти, если образ Docker создан для одной архитектуры (например, x86_64), а на хост-компьютере используется другая архитектура (например, ARM64).

У меня MacOS был ARM64, а Lightsail был основан на x86_64.

✅ Я попробовал создать тот же образ на своем Ubuntu x86_64, и все сработало так, как я ожидал.

Я буду ждать лучшего ответа, поскольку использовать Linux для отправки изображений не слишком реалистично. На данный момент я собираюсь использовать Linux, так как я все еще пытаюсь понять, как создать x86_64 образ на ARM64 машине.