У меня есть приложение 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. Итак, у меня не было установлено никакой переменной env в Lightsail.
🤔 А знаете ли вы, что...
Node.js позволяет выполнять JavaScript на стороне сервера, а не только в браузере.
Я попробовал использовать Mext.js и столкнулся с той же проблемой. Оказывается, ошибка:
exec format error
обычно происходит, когда существует несоответствие архитектуры между образом Docker и хост-компьютером. Это может произойти, если образ Docker создан для одной архитектуры (например, x86_64
), а на хост-компьютере используется другая архитектура (например, ARM64
).
У меня MacOS
был ARM64, а Lightsail был основан на x86_64
.
✅ Я попробовал создать тот же образ на своем Ubuntu x86_64
, и все сработало так, как я ожидал.
Я буду ждать лучшего ответа, поскольку использовать Linux для отправки изображений не слишком реалистично. На данный момент я собираюсь использовать Linux, так как я все еще пытаюсь понять, как создать x86_64
образ на ARM64
машине.