Получение ошибки `репозиторий не существует или может потребоваться «вход в систему docker»: отказано: запрошенный доступ к ресурсу запрещен » в Elastic Beanstalk

#amazon-web-services #docker #asp.net-core

Вопрос:

При развертывании приложения dotnet в качестве докера с опцией Milticontainer в Elasticbean stalk появляется ошибка типа

 2021-05-20 01:26:55    ERROR   ECS task stopped due to: Task failed to start. (traveltouchapi: CannotPullContainerError: Error response from daemon: pull access denied for traveltouchapi, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
postgres_image: )
2021-05-20 01:26:58    ERROR   Failed to start ECS task after retrying 2 times.
2021-05-20 01:27:00    ERROR   [Instance: i-0844a50e307bd8b23] Command failed on instance. Return code: 1 Output: .

 

Сведения об окружающей среде для: TravelTouchApi-dev3
Название приложения: TravelTouchApi
Регион: ap-юг-1
Развернутая версия: app-c1ba-210520_065320
Идентификатор среды: e-i9t6f6vszk
Платформа: arn:aws:elasticbeanstalk:ap-юг-1::платформа/Докер с несколькими контейнерами, работающий на 64-битной Amazon Linux/2.26.0
Уровень: Веб-сервер-Стандарт-1.0
CNAME: TravelTouchApi-dev3.ap-south-1.elasticbeanstalk.com
Обновлено: 2021-05-20 01:23:27.384000 00:00

Мой док-файл таков

 FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build

# Install Node.js
RUN curl -fsSL https://deb.nodesource.com/setup_14.x | bash - 
    amp;amp; apt-get install -y 
        nodejs 
    amp;amp; rm -rf /var/lib/apt/lists/*

WORKDIR /src/TravelTouchApi
COPY ["TravelTouchApi.csproj", "./"]
RUN dotnet restore "TravelTouchApi.csproj"
COPY . .
WORKDIR "/src/TravelTouchApi"
RUN dotnet build "TravelTouchApi.csproj" -c Release -o /app/build


FROM build AS publish
RUN dotnet publish "TravelTouchApi.csproj" -c Release -o /app/publish


FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "TravelTouchApi.dll"]

 

Мой докер-compose.yml-это

 version: '3.4'

networks:
    traveltouchapi-dev:
        driver: bridge

services:
    traveltouchapi:
        image: traveltouchapi:latest
        depends_on:
            - "postgres_image"
        build:
            context: .
            dockerfile: Dockerfile
        ports:
            - "80:80"
        environment:
            DB_CONNECTION_STRING: "host=postgres_image;port=5432;database=blogdb;username=bloguser;password=bloguser"
        networks:
            - traveltouchapi-dev

    postgres_image:
        image: postgres:latest
        ports:
            - "5432"
        restart: always
        volumes:
            - db_volume:/var/lib/postgresql/data
        environment:
            POSTGRES_USER: "bloguser"
            POSTGRES_PASSWORD: "bloguser"
            POSTGRES_DB: "blogdb"
        networks:
            - traveltouchapi-dev
volumes:
    db_volume:
         
 

Мой Dockerrun.aws.json

 {
  "AWSEBDockerrunVersion": 2,
  "containerDefinitions": [
    {
      "environment": [
        {
          "name": "POSTGRES_USER",
          "value": "bloguser"
        },
        {
          "name": "POSTGRES_PASSWORD",
          "value": "bloguser"
        },
        {
          "name": "POSTGRES_DB",
          "value": "blogdb"
        }
      ],
      "essential": true,
      "image": "postgres:latest",
      "memory": 200,
      "mountPoints": [
        {
          "containerPath": "/var/lib/postgresql/data",
          "sourceVolume": "Db_Volume"
        }
      ],
      "name": "postgres_image",
      "portMappings": [
        {
          "containerPort": 5432
        }
      ]
    },
    {
      "environment": [
        {
          "name": "DB_CONNECTION_STRING",
          "value": "host=postgres_image;port=5432;database=blogdb;username=bloguser;password=bloguser"
        }
      ],
      "essential": true,
      "image": "traveltouchapi:latest",
      "name": "traveltouchapi",
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 80
        }
      ],
      "memory": 200
    }
  ],
  "family": "",
  "volumes": [
    {
      "host": {
        "sourcePath": "db_volume"
      },
      "name": "Db_Volume"
    }
  ]

}

 

Ответ №1:

Я думаю, что вы пропускаете шаг входа в систему перед развертыванием приложений.

Можете ли вы попробовать использовать эту команду перед развертыванием?

 aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_DEFAULT_ACCID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
 

Имя изображения должно содержать полное имя репо/тега «natheesh/traveltouchapi: последнее» в файле Dockerrun.json

Комментарии:

1. Можете ли вы показать мне полную ошибку? И шаг, который вы делаете, тоже

2. «ОШИБКА Не удалось запустить задачу ECS после повторной попытки 2 раза. n ОШИБКА ECS задача остановлена из-за: Не удалось запустить задачу. (traveltouchapi: CannotPullContainerError: Ответ на ошибку от демона: отказано в доступе для доступа к traveltouchapi, репозиторий не существует или может потребоваться «вход в докер»: отказано: запрошенный доступ к ресурсу запрещен postgres_image: ) n ОШИБКА не удалось запустить задачу ECS: arn:aws:ecs:ap-south-1:802684962806:задача/awseb-TravelTouchApi-dev-mqs9xrzen5/82a2da45b960475ea1740569a302c8f6 ОСТАНОВЛЕН.’

3. Вам нужно проверить 3 вещи: 1. У ваших экземпляров есть политика извлечения изображения из ECR 2. Это изображение и репо существуют или нет (репо, теги,…) 3. Вы можете запустить docker pull вручную в этом экземпляре или нет

4. Да, Спрашивай… Я понял, что пытался вытащить изображение, не имея имени репо…. Имя изображения должно быть natheesh/traveltouchapi: последнее , после исправления этого оно начало работать…. Спасибо вам за вашу помощь….

5. Нет проблем ^^ Хорошего дня