【发布时间】:2021-01-23 22:42:24
【问题描述】:
我正在尝试为 .net Core 3 “dockerize”this clean architecture template。我使用 docker pull request here 作为我的 proff of concept 应用程序的基础。这是一个 .net core 3 webapi 项目,以 Angular 前端作为客户端应用程序。
我有什么:
- 拉取请求中的基本代码在本地工作。
- 我必须克服的一个初始问题是在本地非开发环境中设置身份服务器 4 的证书,我必须使用该证书安装一个卷并从 appsettings.json 文件中引用它,例如
"IdentityServer": {
"Key": {
"Type": "File",
"FilePath": "/security/mycert.pfx",
"Password": "MyPassword"
}
}
- 我在 azure 中设置了 CI/CD 管道来构建项目并将映像部署到 azure 容器注册表
- 我设置了 CI/CD 版本以将 docker 映像部署到 Web App for Containers (Linux) Web 应用程序。这两个步骤都可以正常工作
我的问题:
Web 应用程序加载并运行容器,并显示有角度的前端。但是,似乎 web api 没有运行。任何访问 web api 端点的尝试都会在浏览器控制台中返回以下错误:
GET https://.....azurewebsites.net/_configuration/CleanArchitecture.WebUI 404(未找到)
错误:未捕获(承诺):错误:无法加载“CleanArchitecture.WebUI”的设置错误:无法加载“CleanArchitecture.WebUI”的设置
CleanArchitecture.WebUI 是作为 dockerfile 入口点的程序集的名称:
ENTRYPOINT ["dotnet", "CleanArchitecture.WebUI.dll"]
前端的所有其他方面都正常工作,只有对“后端”api 的调用失败。 另一个问题是,如果我从 azure 容器中获取 docker 日志,则没有显示错误。
我尝试了什么
- 我尝试在 Web 应用程序的容器设置中将“dotnet CleanArchitecture.WebUI.dll”添加到容器的启动命令中,但这只会引发找不到 CleanArchitecture.WebUI.dll 的错误
- 我已尝试提高日志记录级别(“LogLevel”:“Default”:“Debug”)以获取更多详细信息,但 docker 日志中未显示其他错误详细信息。
- 可能是加载 Identity Server 4 证书时出错,但没有错误可以确认此问题。
这是 azure 管道使用的 docker compose 文件: 版本:'3.4'
services:
webui:
image: ${DOCKER_REGISTRY-}webui
build:
context: .
dockerfile: src/WebUI/Dockerfile
environment:
- "UseInMemoryDatabase=false"
- "ASPNETCORE_ENVIRONMENT=Production"
- "ConnectionStrings__DefaultConnection=myconnection"
- "ASPNETCORE_Kestrel__Certificates__Default__Password=mypass"
- "ASPNETCORE_Kestrel__Certificates__Default__Path=/security/mycert.pfx"
ports:
- "5000:5000"
- "5001:5001"
volumes:
- mcpdata:"/security:/"
restart: always
mcpdata 是已挂载并包含实际证书的 azure 文件共享的名称
这是我用于 CI/CD 的 azure-pipeline.yml:
trigger:
- staging
resources:
- repo: self
variables:
# Container registry service connection established during pipeline creation
dockerRegistryServiceConnection: '****'
imageRepository: 'cleanarchitecture'
containerRegistry: '****.azurecr.io'
dockerComposeFilePath: '$(Build.SourcesDirectory)docker-compose.Production.yml'
tag: '$(Build.BuildId)'
# Agent VM image name
vmImageName: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerComposeFile: $(dockerComposeFilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: staging
问题?
谁能帮我弄清楚为什么我的 web api 似乎没有运行但没有引发错误。至少,如果有人可以帮助我查看 docker 日志中的错误,我会很高兴。
提前致谢
【问题讨论】:
-
好像没有生成CleanArchitecture.WebUI.dll?或者它位于不同的文件夹中。应用程序在推送到 ACR 之前是否在 docker 中构建?您可以查看 [this thread](CleanArchitecture.WebUI.dll) 的答案以查看日志。
-
@LeviLu-MSFT 构建发生在 azure ci/cd 管道中,并被推送到 Azure 容器注册。当我在本地运行“docker-compose -f 'docker-compose.Production.yml' up --build”时,容器可以工作。另一个奇怪的事情是日志中没有显示错误,你会认为如果 Cleanarchitecture 缺少 docker 会在尝试运行它时产生错误。
标签: c# azure docker asp.net-core azure-devops