Невозможно выполнить http-запрос к соседним docker контейнерам в локальной среде. - PullRequest
0 голосов
/ 14 апреля 2020

ОБНОВЛЕНИЕ:

Я обнаружил три проблемы в своем коде

  1. URL-адрес в CoreWebApi: ValuesController.cs: был неправ: enter image description here

  2. Порт 5002 проекта Data Api указывал на не-SSL, а также удалял URL-адреса SSL как из API данных, так и из Интернета. Проекты API

docker -compose.development.yml: core-data-api-service: enter image description here

docker -compose.development.yml: core-web-api-service: enter image description here

Удалено app.UseHttpsRedirection (); из файлов startup.cs обоих проектов.

Теперь я могу создать HTTP-вызов контейнера для контейнера на не-SSL порты.

Однако я все еще не могу совершать https-вызовы на портах ssl.

Если я изменю URL в CoreWebApi> ValuesController.cs на:

https://core-data-api-service:5003/api/values

Затем я получаю следующую ошибку: enter image description here


У меня есть два базовых c asp. net основных веб-приложения API: 1. CoreWebApi 2. CoreDataApi .

Я запускаю оба приложения в двух отдельных контейнерах на локальном хосте Windows 10.

Полный код можно найти в этом git репо .

Я не могу сделать HTTP-вызов из приложения CoreWebApi в контейнере в приложение CoreDataApi в контейнере. Получение следующего исключения в приложении CoreWebApi: enter image description here

URL-адреса localhost для обоих приложений:

  1. CoreWebApi - http://localhost: 5000 & https://localhost: 5001

  2. CoreDataApi - http://localhost: 5002 & https://localhost: 5003

Структура папки:

enter image description here

CoreWebApi: ValuesController.cs:

public async Task<ActionResult<IEnumerable<string>>> Get () {
            try {
                HttpResponseMessage response = await client.GetAsync ("http://core-web-api-service:5002/api/values");
                response.EnsureSuccessStatusCode ();
                string responseBody = await response.Content.ReadAsStringAsync ();

                Console.WriteLine (response.StatusCode);
                Console.WriteLine ("XXXXXXXXXXXXXX-------Success--------XXXXXXXXXXXXXX");
            } catch (HttpRequestException e) {
                Console.WriteLine ("\nException Caught!");
                Console.WriteLine ("Message :{0} ", e.Message);
                Console.WriteLine ("StackTrace :{0} ", e.StackTrace);
            }
            return new string[] { "value1", "value2" };
        }

оба контейнера используют одну и ту же сеть, созданную именем root папка vscode-workflow: enter image description here

. / Vscode-workflow / CoreWebApi / .docker / development.dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS base
WORKDIR /src

# Copy only the project file.
# We copied only the project file and not the complete source code
# to leverage the docker's caching capabilities thereby optimizing up the build time.
COPY ["CoreWebApi.csproj", "./"]

# Restore the packages
RUN dotnet restore "./CoreWebApi.csproj"

# Copy the source code to the /src directory
COPY . .

RUN update-ca-certificates

# Expose ports 5000 & 5001 as our app will run on these ports
EXPOSE 5000 5001
ENTRYPOINT ["dotnet", "watch", "--project=CoreWebApi.csproj", "run"]

. / Vscode-workflow / docker -compose.development.yml:

version: '3.4'

services:
  core-web-api-service:
    image: core.web.api.dev.image
    container_name: core.web.api.dev.container
    build:
      args:
        buildconfig: Debug
      context: ./CoreWebApi
      dockerfile: .docker/development.dockerfile
    environment:
      - ASPNETCORE_ENVIRONMENT=Development

      # Set the certificate env variables (We copied certificate from host to below location. See volumes)
      - Kestrel__Certificates__Default__Path=/root/.dotnet/https/aspnetcore-cert.pfx
      - Kestrel__Certificates__Default__Password=yourpassword

      # The .net core base image used in the docker file, runs the app on port 80 by default
      # Force it to run on ports 5000 & 5001
      # Also we are specifying 0.0.0.0 instead of localhost
      # as the app crashes inside docker when used localhost.
      - ASPNETCORE_URLS=http://0.0.0.0:5000/;https://0.0.0.0:5001
      - DOTNET_USE_POLLING_FILE_WATCHER=true
    ports:
      - 5000:5000
      - 5001:5001
    volumes:
      # Map the certificate from host to the container
      - 'c:/cert/:/root/.dotnet/https'
      - 'c:/cert/:/usr/local/share/ca-certificates'
      - './CoreWebApi/:/src'

  core-data-api-service:
    image: core.data.api.dev.image
    container_name: core.data.api.dev.container
    build:
      args:
        buildconfig: Debug
      context: ./CoreDataApi
      dockerfile: .docker/development.dockerfile
    environment:
      - ASPNETCORE_ENVIRONMENT=Development

      # Set the certificate env variables (We copied certificate from host to below location. See volumes)
      - Kestrel__Certificates__Default__Path=/root/.dotnet/https/aspnetcore-cert.pfx
      - Kestrel__Certificates__Default__Password=yourpassword

      # The .net core base image used in the docker file, runs the app on port 80 by default
      # Force it to run on ports 5000 & 5001
      # Also we are specifying 0.0.0.0 instead of localhost
      # as the app crashes inside docker when used localhost.
      - ASPNETCORE_URLS=http://0.0.0.0:5003/;https://0.0.0.0:5002
      - DOTNET_USE_POLLING_FILE_WATCHER=true
    ports:
      - 5002:5002
      - 5003:5003
    volumes:
      # Map the certificate from host to the container
      - 'c:/cert/:/root/.dotnet/https'
      - 'c:/cert/:/usr/local/share/ca-certificates'
      - './CoreDataApi/:/src'
...