#amazon-web-services #docker #dockerfile #amazon-elastic-beanstalk #docker-container
#amazon-web-services #docker #dockerfile #amazon-elastic-beanstalk #docker-контейнер
Вопрос:
Я хочу, чтобы Elastic Beanstalk вызывал мой файл docker-compose при запуске экземпляра EC2, чтобы запустить redis в контейнере docker. Он этого не делает. Когда я запускаю файл docker-compose с помощью скрипта за пределами AWS, мое приложение работает нормально. Я просмотрел документацию по AWS, и там нет четкого ответа о том, как EB на самом деле находит мой файл docker compose. Я хотел бы попросить совета у любого, у кого немного больше опыта, о том, как это исправить.
docker-compose
version: '3'
services:
web:
image: filamentgraphql/filament-prod
container_name: 'filament-prod-hot'
ports:
- '4000:4000'
volumes:
- .:/usr/src/app
command: npm run build
redis-server:
image: 'redis'
volumes:
- "./data/redis:/usr/src/app/data"
Dockerfile
FROM node:12.16.1
WORKDIR /usr/src/app
COPY . /usr/src/app
RUN npm install
RUN npm run build
EXPOSE 4000
ENTRYPOINT node ./server/server.js
Ответ №1:
Я думаю, что варианты взрывоопасны, когда я читаю документы AWS:
Вы можете развернуть свое веб-приложение в качестве контейнерного сервиса в Elastic Beanstalk, выполнив одно из следующих действий:
- docker-compose.yml
- Dockerfile
Если вы хотите продолжать использовать Dockerfile
для своего docker-compose.yml
, переименуйте его или поместите в какую-нибудь подпапку, чтобы EB не нашел Dockerfile
Ответ №2:
это будет работать
version: '3'
services:
web:
build:
context: .
dockerfile: Dockerfile
image: filamentgraphql/filament-prod
container_name: 'filament-prod-hot'
ports:
- '4000:4000'
volumes:
- .:/usr/src/app
command: npm run build
redis-server:
image: 'redis'
volumes:
- "./data/redis:/usr/src/app/data"
… но он дважды перестроит ваш контейнер docker. Чтобы обойти это, можно также переименовать ваш Dockerfile
в Dockerfile-aws
и сделать
build:
context: .
dockerfile: Dockerfile-aws