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 аргумент. Таким образом, очевидно, что 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. Вы не должны сталкиваться с проблемой там.