Я создал новый проект 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: нет такого файла
[...]