AWS Elastic Beanstalk Docker не поддерживает многоэтапную сборку

Я изо всех сил пытаюсь развернуть свою сборку в AWS на Docker. Я понятия не имею, где находится решение, поскольку я впервые работаю с Docker. У меня все работает нормально локально, но при развертывании я получаю следующую ошибку в Elastic Beanstalk:

2020/04/30 05:35:02.330900 [ERROR] An error occurred during execution of command [app-deploy] - [Docker Specific Build Application]. Stop running the command. Error: failed to pull docker image: Command /bin/sh -c docker pull node:13.3.0 AS compile-image failed with error exit status 1. Stderr:"docker pull" requires exactly 1 argument.
See 'docker pull --help'.

Вот как выглядит мой файл Docker:

FROM node:13-alpine as builder

WORKDIR /opt/ng
COPY package.json package-lock.json ./
RUN npm install

ENV PATH="./node_modules/.bin:$PATH"

COPY . ./
RUN ng build --prod

FROM nginx:1.18-alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /opt/ng/dist/angular-universal-app/browser /usr/share/nginx/html

Может кто-нибудь указать мне правильное направление? Или этот метод многоступенчатой ​​сборки не поддерживается версией Docker Elastic Beanstalk?

2 ответа

Решение

У меня такая же проблема. На самом деле я проверяю следующие строки в моем файле журнала:

2020/05/26 17:26:30.327310 [INFO] Running command /bin/sh -c docker pull node:alpine as builder
2020/05/26 17:26:30.369280 [ERROR] "docker pull" requires exactly 1 argument.

Как видите, он пытается выполнить "вытягивание докера" с тремя аргументами:

  1. узел: альпийский
  2. как
  3. строитель

и, конечно, это невозможно, потому что для этого требуется только 1 аргумент. Таким образом, очевидно, что AWS Elastic Beanstalk не поддерживает именование этапов. По этой причине я решил использовать Безымянный строитель:

FROM node:13-alpine

и в конце концов:

COPY --from=0 /opt/ng/dist/angular-universal-app/browser /usr/share/nginx/html

Окончательный файл Dockerfile:

FROM node:13-alpine

WORKDIR /opt/ng
COPY package.json package-lock.json ./
RUN npm install

ENV PATH="./node_modules/.bin:$PATH"

COPY . ./
RUN ng build --prod

FROM nginx:1.18-alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=0 /opt/ng/dist/angular-universal-app/browser /usr/share/nginx/html

Для меня это работает с использованием этого решения. Если у кого-то возникнут проблемы, поделитесь журналом последних 100 строк

Я видел эту ошибку при использовании стека решений, в котором используется Amazon Linux 2. Эти платформы новые и имеют некоторые текущие проблемы.

Поддержка Amazon Linux 2 для AWS Elastic Beanstalk находится на стадии бета-тестирования и может быть изменена.

Используйте стек решений, в названии которого есть Amazon Linux. Вы не должны сталкиваться с проблемой там.

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