Elastic Beanstalk в AWS использует только мой файл Dockerfile, а не мой файл Docker Compose

#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