Почему мое приложение 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.

EXPOSE 3000 # <--- I thought this would work К вашему сведению, команда EXPOSE в Docker ничего не делает. Он служит лишь документацией для других людей, читающих ваш файл.
Peppe L-G 04.07.2024 10:35

У меня нет опыта работы с контейнерами LightSail (никогда ими не пользовался), но вы где-нибудь сказали SvelteKit прослушивать порт 3000?

Peppe L-G 04.07.2024 10:36

@PeppeL-G Спасибо за комментарий, когда я проделал точно такой же процесс с Linux, и все работало идеально.

kawa 04.07.2024 14:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

exec format error

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

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

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

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

Другие вопросы по теме