#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. Нет проблем ^^ Хорошего дня