ОБНОВЛЕНИЕ:
Я обнаружил три проблемы в своем коде
URL-адрес в CoreWebApi: ValuesController.cs: был неправ:
Порт 5002 проекта Data Api указывал на не-SSL, а также удалял URL-адреса SSL как из API данных, так и из Интернета. Проекты API
docker -compose.development.yml: core-data-api-service:
docker -compose.development.yml: core-web-api-service:
Удалено
app.UseHttpsRedirection (); из файлов startup.cs обоих проектов.
Теперь я могу создать HTTP-вызов контейнера для контейнера на не-SSL порты.
Однако я все еще не могу совершать https-вызовы на портах ssl.
Если я изменю URL в CoreWebApi> ValuesController.cs на:
https://core-data-api-service:5003/api/values
Затем я получаю следующую ошибку:
У меня есть два базовых c asp. net основных веб-приложения API: 1. CoreWebApi 2. CoreDataApi .
Я запускаю оба приложения в двух отдельных контейнерах на локальном хосте Windows 10.
Полный код можно найти в этом git репо .
Я не могу сделать HTTP-вызов из приложения CoreWebApi в контейнере в приложение CoreDataApi в контейнере. Получение следующего исключения в приложении CoreWebApi:
URL-адреса localhost для обоих приложений:
CoreWebApi - http://localhost: 5000 & https://localhost: 5001
CoreDataApi - http://localhost: 5002 & https://localhost: 5003
Структура папки:
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:
. / 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'