gpt4 book ai didi

docker - 在 Docker 中的 .Net Core 2.0 上运行 IdentityServer4 - 访问主机资源

转载 作者:IT老高 更新时间:2023-10-28 21:24:09 24 4
gpt4 key购买 nike

我正在尝试将作为 .Net Core 2.0 应用程序的服务 (IdentityServer 4 v2) 转换为在 Docker for Windows 上运行。这仅在开发工作站上。我对现有的 Net Core 2.0 服务执行了标准的 Visual Studio 2017“添加 Docker 支持”。服务启动正常,但由于以下问题而失败:

  1. 该服务正在寻找安装在本地主机上的证书。在 docker 中运行它看不到这个证书。
  2. 该服务使用主机 etc/Hosts 文件中的 DNS 来查找我们的数据库服务器。在 Docker 上运行的服务看不到主机 DNS。

我尝试将 docker compose 中的 network_mode 设置为“host”,但构建失败。建立这样一个环境的建议方法是什么?

运行时使用docker compose设置,默认compose和配置非常简单:

version: '3'

services:
identity.server:
image: identity.server
ports:
- "8100:8100"
build:
context: ./src/Identity.Server
dockerfile: Dockerfile

引用的dockerfile:

FROM microsoft/dotnet:2.0-runtime
ARG source
WORKDIR /app
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "Identity.Server.dll"]

我已阅读以下答案,但它似乎不适用于 .Net 本身:https://devops.stackexchange.com/questions/1501/configure-docker-to-use-ssl-for-a-private-registry-on-windows-10?newreg=0d065d6c37214be4bd1f02a45e1248ba

我们正在像这样访问证书,它只是返回 null。服务是否在Docker之外运行时发现。

var cert = X509.LocalMachine.CertificateAuthority.Thumbprint
.Find(settings.CertificateThumbprint).FirstOrDefault();

最佳答案

使用 docker 的重点是将容器资源与其他容器分开并托管自己。从应用程序 POV 来看,您调用的 LocalMachine 不是您的主机,而是“容器”,因此一切都按预期工作。

我假设您不想将crt文件放在图像中,这是非常明智的。

要使其正常工作,请将 crt 文件放在某个文件夹中,然后使用 docker 卷将该目录挂载到容器中,或者如果您在 swarm 中使用 docker,请使用 docker secrets。

关于docker - 在 Docker 中的 .Net Core 2.0 上运行 IdentityServer4 - 访问主机资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47403061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com