Не удается подключиться к конечной точке ядра dotnet при публикации в докере - PullRequest
0 голосов
/ 12 мая 2019

Я работал над этим некоторое время и, похоже, не могу правильно настроить докер для моего основного приложения dotnet. Работает нормально при работе с dotnet run. Вот мой файл docker, файл docker compose, файл контроллера и журналы приложений после запуска docker-compose up.

DockerFile:

# build application
FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app

COPY ./ ./
RUN dotnet restore
RUN dotnet publish -c Release

# run application
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env app/bin/Release/netcoreapp2.2/publish/ /app
COPY appsettings.json /app
EXPOSE 80
EXPOSE 5000

ENTRYPOINT ["dotnet", "imdb_id_retrieval.dll"]

докер-compose.yml:

version: '3.7'

volumes:
  imdb_id_service_volume:
    external:
      name: imdb_id_service_volume

networks:
  app_network:
    driver: bridge

services:
  postgres_imdb_id_db:
    image: postgres
    ports:
      - "5432:5432"
    volumes:
      - imdb_id_service_volume:/var/lib/postgresql/data
    networks:
      - app_network

  docker_imdb_id_service:
    image: docker_retrieve_data
    depends_on: 
      - "postgres_imdb_id_db"
    restart: always
    environment:
      - ASPNETCORE_ENVIRONMENT=development
    build:
      context: .
      dockerfile: Dockerfile
    networks:
      - app_network
    ports: 
      - "5000:80"

Контроллер:

using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using imdb_data_retrieval.Logic;

namespace imdb_data_retrieval.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ImdbIdController : ControllerBase
    {
        private IRetrieveImdbIdService _retrieveImdbIdService;

        public ImdbIdController(IRetrieveImdbIdService retrieveImdbIdService){
            _retrieveImdbIdService = retrieveImdbIdService;
        }

        // GET api/values
        [HttpGet]
        public async Task<ActionResult<string>> Get(string title, string releaseYear)
        {
            var imdbId = await _retrieveImdbIdService.ScrapeImdbIdAsync(title, releaseYear);
            if (imdbId == Constants.InvalidYearResponse)
                return BadRequest(Constants.InvalidYearResponse);
            if (imdbId == null) 
                return NotFound(Constants.MovieWasNotFoundResponse);
            return Ok(imdbId);
        }
    }
}

Итак, на этом этапе я запускаю «сборку docker-compose», а затем «docker-compose up». Это вывод:

[user@user-pc imdb_id_retrieval]$ docker-compose up
Starting imdb_id_retrieval_postgres_imdb_id_db_1 ... done
Recreating imdb_id_retrieval_docker_imdb_id_service_1 ... done
Attaching to imdb_id_retrieval_postgres_imdb_id_db_1, imdb_id_retrieval_docker_imdb_id_service_1
postgres_imdb_id_db_1     | 2019-05-12 12:37:58.035 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
postgres_imdb_id_db_1     | 2019-05-12 12:37:58.035 UTC [1] LOG:  listening on IPv6 address "::", port 5432
postgres_imdb_id_db_1     | 2019-05-12 12:37:58.112 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_imdb_id_db_1     | 2019-05-12 12:37:58.267 UTC [23] LOG:  database system was shut down at 2019-05-12 12:37:12 UTC
postgres_imdb_id_db_1     | 2019-05-12 12:37:58.555 UTC [1] LOG:  database system is ready to accept connections
docker_imdb_id_service_1  | derp
docker_imdb_id_service_1  | host=postgres_imdb_id_db; Username=postgres; Port=5432; Database=ImdbIds;
docker_imdb_id_service_1  | warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
docker_imdb_id_service_1  |       No XML encryptor configured. Key {964dd0aa-58de-4714-b544-3c48e2b80bb9} may be persisted to storage in unencrypted form.
docker_imdb_id_service_1  | Hosting environment: development
docker_imdb_id_service_1  | Content root path: /app
docker_imdb_id_service_1  | Now listening on: http://[::]:80
docker_imdb_id_service_1  | Application started. Press Ctrl+C to shut down.

Теперь я захожу в свой браузер и захожу на "http://localhost:5000/api/imdbid?title=iron%20man&releaseYear=2008", и я получаю ответ 404. В первый раз, когда я пытаюсь достичь конечной точки, я вижу

docker_imdb_id_service_1  | warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3]
docker_imdb_id_service_1  |       Failed to determine the https port for redirect.

И тогда не регистрируется последовательных попаданий. Я не думаю, что мне нужно настроить https.

Есть идеи, что я делаю не так?

EDIT:

Мой Dockerfile теперь выглядит так.

# build application
FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app

COPY ./ ./
RUN dotnet restore
RUN dotnet publish -c Release

# run application
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env app/bin/Release/netcoreapp2.2/publish/ /app
COPY appsettings.json /app
EXPOSE 80
EXPOSE 5000

# changed this
ENTRYPOINT ["dotnet", "imdb_id_retrieval.dll", "--urls", "http://0.0.0.0:5000"] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...