Невозможно создать сертификат разработчика для основного веб-приложения ASP.NET в контейнере Docker. - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь создать простое веб-приложение ASP.NET-Core 2.1, которое запускается в Docker и вызывает HTTPS.

Если я не использую HTTPS, веб-приложение работает нормально в экземпляре Docker. Если я запускаю HTTPS или вручную пытаюсь подключиться к порту HTTPS, я получаю сообщение об ошибке «невозможно подключиться» или что-то неприятное, например, *. 1003 *

Итак, насколько я понимаю, мне нужно каким-то образом скопировать доверенную самозаверяющую сертификацию dev с моей машины разработки localhost на экземпляр Docker.

К счастью, есть несколько хороших документов, которые помогают объяснить / рассказать об этом:

Но каждый раз, когда я пытаюсь запустить первый основной шаг -> создание сертификата, я получаю следующие ошибки:

C:\Users\justi>dotnet dev-certs https --clean
Cleaning HTTPS development certificates from the machine. A prompt might get displayed to confirm the removal of some of the certificates.

C:\Users\justi>dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\hornet.apigateway.website.public.pfx -p secretpassword
A valid HTTPS certificate is already present.

Но, как вы можете видеть, я только что попытался очистить свое хранилище сертификатов (которое мне предложили подтвердить удаление сертификата), а затем попытаться создать новое.

Приведенная выше команда основана на примерах, приведенных выше.

Мне кажется, что сообщение об ошибке неверное и сообщение об ошибке real не отображается?


Обновление

На всякий случай, если я испортил свои файлы Docker, вот мои 2x docker-compose файлы:

docker-compose.yml

apigateway.website.public:
    image: hornet/apigateway.website.public
    build:
      context: .
      dockerfile: src/Api Gateways/ApiGateway.Website.Public/Dockerfile
    #ports:
    #  - "5000:443"
    depends_on:
      - microservice1.api
      - microservice2.api

docker-compose.override.yml

apigateway.website.public:
  environment:
    - ASPNETCORE_ENVIRONMENT=Development
    - ASPNETCORE_URLS=https://localhost;http://localhost
    - ASPNETCORE_HTTPS_PORT=5001
  ports:
  # NOTE: need to copy the dev cert over to the container
  # REF:  o) https://github.com/dotnet/dotnet-docker/blob/master/samples/aspnetapp/aspnetcore-docker-https-development.md
  #       o) https://github.com/dotnet/dotnet-docker/blob/master/samples/aspnetapp/aspnetcore-docker-https.md
  #       o) https://github.com/aspnet/Docs/issues/3310
  #       o) https://github.com/aspnet/Docs/issues/6199
    - "5000:80"
    - "5001:443"
  volumes:
    - ${APPDATA}/Microsoft/UserSecrets/:/root/.microsoft/usersecrets
    - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https/

1 Ответ

0 голосов
/ 05 сентября 2018

Я недавно получил это, чтобы работать для моего проекта. Я извлек большую часть из созданных файлов Visual Studio Docker Compose.

Есть несколько различий, которые я вижу в вашем синтаксисе составления, которые могут способствовать вашей проблеме.

Во-первых, ваши переменные среды - я не уверен, какую версию compose вы используете. Я использовал 3.7 и смог определить переменные следующим образом:

      ASPNETCORE_ENVIRONMENT: "Development"
      ASPNETCORE_URLS: "https://+:443;http://+:80"
      ASPNETCORE_HTTPS_PORT: "44371"

Обратите внимание, что основное отличие состоит в том, что я объявляю свои URL-адреса aspnetcore, используя подстановочный знак для домена, и объявляю номер порта непосредственно после этого https://+:443;http://+:80 в качестве номеров внутреннего порта

Мне удалось получить доступ к приложению именно так, как я ожидал, к https://localhost:44371.

Я по-прежнему определяю порты и в моем файле компоновки, но я думаю, что главное здесь - вам нужно сообщить ядру aspnet, какие порты находятся через переменную среды ASPNETCORE_URLS. Порты, объявленные в вашем файле compose, информируют ваш докер-контейнер, а не ваше приложение.

Таким образом, составной файл, который может работать для вас, будет следующим:

apigateway.website.public:
  environment:
    ASPNETCORE_ENVIRONMENT: "Development"
    ASPNETCORE_URLS: "https://+:443;http://+:80"
    ASPNETCORE_HTTPS_PORT: "5001"
  volumes:
    - ${APPDATA}/Microsoft/UserSecrets/:/root/.microsoft/usersecrets:ro
    - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
  ports:
    - "5000:80"
    - "5001:443"

Я также добавил индикатор: ro (только для чтения) в ваши тома, так как это, похоже, лучший метод.

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