Как запустить базовое приложение ASP.net, сгенерированное Visual Studio 2019 в Linux? Проблема с настройкой SSL - PullRequest
0 голосов
/ 30 июня 2019

Я создал новый проект ASP.net Core 2.1 в Visual Studio 2019. Я решил сгенерировать Docker-контейнер linux и файл docker-compose.Все работает нормально, когда я использую VS для запуска.

Проблема возникает, когда я пытаюсь запустить свое приложение в рабочей среде.Для того, чтобы сделать это, я скопировал код git на машину targer linux.Затем я запускаю docker-compose up в папке моего проекта.

Сначала это не сработало, потому что приложение использует HTTPS и на компьютере не было сертификатов HTTPS для localhost.Мне нужно было сгенерировать сертификат:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p crypticpassword

В docker-compose.yml Я указал том, чтобы связать папку с сертификатом с папкой внутри контейнера док-станции, где мое приложение ищет сертификаты (последняя строка кода ниже).

version: '3.4'

services:
  mongo:
      # not relevant

  mongo-express:
      # not relevant

  synceddb:
      image: ${DOCKER_REGISTRY-}synceddb
      ports:
        - 13000:13000
        - "10002:80"
        - "44361:443"
      build:
        context: .
        dockerfile: SyncedDB/Dockerfile
      depends_on:
        - mongo
      environment:
        - ASPNETCORE_ENVIRONMENT=Development
        - ASPNETCORE_URLS=https://+:443;http://+:80
        - ASPNETCORE_HTTPS_PORT=44361
        - ASPNETCORE_Kestrel__Certificates__Default__Password="crypticpassword"
        - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
      volumes:
      - ${HOME}/.aspnet/https:/https/

Dockerfile выглядит следующим образом:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.1-stretch AS build
WORKDIR /src
COPY ["SyncedDB/SyncedDB.csproj", "SyncedDB/"]
RUN dotnet restore "SyncedDB/SyncedDB.csproj"
COPY . .
WORKDIR "/src/SyncedDB"
RUN dotnet build "SyncedDB.csproj" -c Release -o /app

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

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

Проблема в том, что мое приложение не видит мой сертификат (по крайней мере, именно так я интерпретирую эту ошибку)

крит.

at [...]

Необработанное исключение: Interop + Crypto + OpenSslCryptographicException: ошибка: 2006D080: подпрограммы BIO: BIO_new_file: нет такого файла

[...]

1 Ответ

0 голосов
/ 01 июля 2019

Наконец исправили.В моей конфигурации две ошибки:

1: ненужные кавычки в пароле сертификата

Было:

- ASPNETCORE_Kestrel__Certificates__Default__Password="crypticpassword"

Должно быть:

- ASPNETCORE_Kestrel__Certificates__Default__Password=crypticpassword

2: Приложение искало сертификат в неправильном месте.

Я использовал докер с sudo в качестве пользователя root, но сгенерировал сертификат с использованием общей учетной записи.Я думал, что ${HOME} будет указывать на мою домашнюю папку, но вместо этого она указывала на корневую папку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...