CannotPullContainerError при развертывании мультиконтейнерного приложения на ElasticBeanstalk - PullRequest
0 голосов
/ 24 октября 2018

У меня есть мультиконтейнерное приложение, которое я хочу развернуть на ElasticBeanstalk.Ниже мои файлы.

Dockerfile

FROM python:2.7

WORKDIR /app

ADD . /app

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y \
    apt-utils \
    git \
    python \
    python-dev \
    libpcre3 \
    libpcre3-dev \
    python-setuptools \
    python-pip \
    nginx \
    supervisor \
    default-libmysqlclient-dev \
    python-psycopg2 \
    libpq-dev \
    sqlite3 && \
    pip install -U pip setuptools && \
    rm -rf /var/lib/apt/lists/*

RUN pip install -r requirements.txt

EXPOSE 8000

RUN chmod +x entry_point.sh

docker-compose.yml

version: "2"
services:
  db:
    restart: always
    container_name: docker_test-db
    image: postgres:9.6
    expose:
      - "5432"
    mem_limit: 10m
    environment:
      - POSTGRES_NAME=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=docker_test

  redis:
    restart: always
    image: redis:3.0
    expose:
      - "6379"
    mem_limit: 10m

  web:
    # replace username/repo:tag with your name and image details
    restart: always
    build: .
    image: docker_test
    container_name: docker_test-container
    ports:
      - "8000:8000"
    environment:
      - DATABASE=db
      - POSTGRES_NAME=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=docker_test
    mem_limit: 500m
    depends_on:
      - db
      - redis
    entrypoint: ./entry_point.sh
    command: gunicorn docker_test.wsgi:application -w 2 -b :8000 --timeout 120 --graceful-timeout 120 --worker-class gevent

  celery:
    image: docker_test
    container_name: docker_test-celery
    command: celery -A docker_test worker -l info
    links:
      - db
      - redis
    mem_limit: 10m
    depends_on:
      - web

  cbeat:
    image: docker_test
    container_name: docker_test-cbeat
    command: celery beat --loglevel=info
    links:
      - db
      - redis
    mem_limit: 10m
    depends_on:
      - web

Я работаю файлкогда я запускаю его в своей локальной системе.Но когда я загружаю его на эластичный стержень, он выдает следующую ошибку:

Задача ECS остановлена ​​из-за: Основной контейнер в задаче завершен..* в Dockerrun.aws.json с помощью преобразование контейнера .Для вышеуказанного файла мой Dockerrun.aws.json следующий.

{
    "AWSEBDockerrunVersion": 2,
    "containerDefinitions": [
        {
            "command": [
                "celery",
                "beat",
                "--loglevel=info"
            ],
            "essential": true,
            "image": "docker_test",
            "links": [
                "db",
                "redis"
            ],
            "memory": 10,
            "name": "cbeat"
        },
        {
            "command": [
                "celery",
                "-A",
                "docker_test",
                "worker",
                "-l",
                "info"
            ],
            "essential": true,
            "image": "docker_test",
            "links": [
                "db",
                "redis"
            ],
            "memory": 10,
            "name": "celery"
        },
        {
            "environment": [
                {
                    "name": "POSTGRES_NAME",
                    "value": "postgres"
                },
                {
                    "name": "POSTGRES_USER",
                    "value": "postgres"
                },
                {
                    "name": "POSTGRES_PASSWORD",
                    "value": "postgres"
                },
                {
                    "name": "POSTGRES_DB",
                    "value": "docker_test"
                }
            ],
            "essential": true,
            "image": "postgres:9.6",
            "memory": 10,
            "name": "db"
        },
        {
            "essential": true,
            "image": "redis:3.0",
            "memory": 10,
            "name": "redis"
        },
        {
            "command": [
                "gunicorn",
                "docker_test.wsgi:application",
                "-w",
                "2",
                "-b",
                ":8000",
                "--timeout",
                "120",
                "--graceful-timeout",
                "120",
                "--worker-class",
                "gevent"
            ],
            "entryPoint": [
                "./entry_point.sh"
            ],
            "environment": [
                {
                    "name": "DATABASE",
                    "value": "db"
                },
                {
                    "name": "POSTGRES_NAME",
                    "value": "postgres"
                },
                {
                    "name": "POSTGRES_USER",
                    "value": "postgres"
                },
                {
                    "name": "POSTGRES_PASSWORD",
                    "value": "postgres"
                },
                {
                    "name": "POSTGRES_DB",
                    "value": "docker_test"
                }
            ],
            "essential": true,
            "image": "docker_test",
            "memory": 500,
            "name": "web",
            "portMappings": [
                {
                    "containerPort": 8000,
                    "hostPort": 8000
                }
            ]
        }
    ],
    "family": "",
    "volumes": []
}

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Я не очень знаком с EB, но я довольно хорошо знаком с ECR и ECS.

Обычно я получаю эту ошибку, когда пытаюсь вытащить изображение из пустого репозитория на ECR, другими словами,Репозиторий ECR создан, но вы еще не вставили в репозиторий какие-либо образы докера.

Это также может произойти, если вы попытаетесь извлечь изображение из ECR и не можете найти номер версии изображения втег.Я предлагаю вам изменить файл docker-compose.yml, чтобы использовать последнюю версию образов.Это будет означать, что везде, где вы упоминаете образ docker_test, вам понадобится добавить к нему суффикс ": latest" Примерно так:

image: docker_test:latest

Я опубликую весь свой docker-compose.yml, который я сделал для вас в концеответа.

Я бы посоветовал вам взглянуть на этот документ: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.container.console.html см. раздел: «Использование изображений из репозитория Amazon ECR», они объясняют, как можно разрешить вход в докер.выпуск.

Надеюсь, это поможет.Пожалуйста, ответьте, если у вас есть какие-либо вопросы по этому поводу.

version: "2"
services:
  db:
    restart: always
    container_name: docker_test-db
    image: postgres:9.6
    expose:
      - "5432"
    mem_limit: 10m
    environment:
      - POSTGRES_NAME=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=docker_test

  redis:
    restart: always
    image: redis:3.0
    expose:
      - "6379"
    mem_limit: 10m

  web:
    # replace username/repo:tag with your name and image details
    restart: always
    build: .
    image: docker_test:latest
    container_name: docker_test-container
    ports:
      - "8000:8000"
    environment:
      - DATABASE=db
      - POSTGRES_NAME=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=docker_test
    mem_limit: 500m
    depends_on:
      - db
      - redis
    entrypoint: ./entry_point.sh
    command: gunicorn docker_test.wsgi:application -w 2 -b :8000 --timeout 120 --graceful-timeout 120 --worker-class gevent

  celery:
    image: docker_test
    container_name: docker_test-celery
    command: celery -A docker_test worker -l info
    links:
      - db
      - redis
    mem_limit: 10m
    depends_on:
      - web

  cbeat:
    image: docker_test:latest
    container_name: docker_test-cbeat
    command: celery beat --loglevel=info
    links:
      - db
      - redis
    mem_limit: 10m
    depends_on:
      - web
0 голосов
/ 24 октября 2018

Пожалуйста, отправьте изображение «docker_test» либо в dockerhub, либо в ECR, чтобы Beanstalk мог извлечь изображение из.В настоящее время он находится в вашем регионе, и агент ECS не знает об этом.

  1. Tag & Push docker_test изображение в реестре, например dockerhub & ECR.
  2. Обновление URL-адреса репозитория изображений в Dockerrun.aws.json.
  3. Разрешить Beanstalk извлекатьобраз.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...