新建web項目,此時launchSettings.json文件為:
"iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:54372", "sslPort": 54373 }
此時sslPort不為0(開啟https時)
http和https兩種協議的端口都固定
Dockerfile文件中可以不暴露端口(EXPOSE可以不設置),如:
#EXPOSE 80 #EXPOSE 443
sslPort修改為0(關閉https時)坑出現了
每次重新編譯程序端口號會遞增,無法固定。
Dockerfile文件中必須暴露端口,如:
EXPOSE 80
結論:docker調式時,不能把web項目launchSettings.json中的sslPort設置為0來關閉https,這樣會使端口變成不可控。
完
-----------------------------------------------------------------------------------------------------------------------------------------------------------
發布時,必須設置EXPOSE
80和443兩個默認端口都可以通過Dockerfile進行修改,EXPOSE 跟着改,如:
ENV ASPNETCORE_URLS http://+:81 EXPOSE 81
或
ENV ASPNETCORE_URLS http://+:81,https://+:444 EXPOSE 81 EXPOSE 444
另:vs+docker啟動環境下,多種方式修改配置,環境變量始終為Development,代碼內修改除外。
Production部分
啟用https時docker-compose.override.yml文件為
aspnetcore環境變量修改為非Development時,因為代碼中加入了app.UseHsts();且配置文件(用戶機密)中無類似"Kestrel:Certificates:Development:Password": "7de8c379-3703-4683-9d33-fafd9540743c"的配置,若無證書,docker-compose啟動會報錯
此時內容為:
version: '3.4' services: dockerlinuxdemo.web: restart: always environment: - ASPNETCORE_ENVIRONMENT=Production - ASPNETCORE_URLS=https://+:443;http://+:80 - ASPNETCORE_HTTPS_PORT=38112 ports: - "38111:80" - "38112:443" volumes: - ./DockerLinuxDemo.Web/bin/Release/netcoreapp2.1/publish:/app - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
不啟用https時修改ASPNETCORE_URLS即可,ASPNETCORE_HTTPS_PORT和ports並不影響:
version: '3.4' services: dockerlinuxdemo.web: restart: always environment: - ASPNETCORE_ENVIRONMENT=Production - ASPNETCORE_URLS=http://+:80 - ASPNETCORE_HTTPS_PORT=38112 ports: - "38111:80" - "38112:443" volumes: - ./DockerLinuxDemo.Web/bin/Release/netcoreapp2.1/publish:/app - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
docker-compose up --build -d 挺方便的