如何在Azure Web应用程序中为容器设置dns选项

问题描述 投票:13回答:2

这是运行容器时发生的情况。我想知道是否有办法启动带有自定义DNS的容器的Web应用程序。

我在ILB-ASE中有5个微服务,他们需要能够使用VNet中的自定义DNS服务器相互呼叫。当我检查resolv.conf时,我看到127.0.0.11。我需要将其设置为我自己的自定义DNS服务器。

我们如何在这里注入自定义DNS值?

我们应该使用appsettings,如果是这样,容器的Web应用程序中的值是什么?

所以我可以使用--dns选项

Azure运行它的神秘部分。一些价值观来自appsettings。

2018-08-23 14:12:56.100 INFO - docker run -d -p 13940:5001 --name xxx -e DOCKER_CUSTOM_IMAGE_NAME = xxx.azurecr.io / xxx:558 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE = false -e WEBSITES_PORT = 5001 -e WEBSITE_SITE_NAME = xxx -e WEBSITE_AUTH_ENABLED = False -e WEBSITE_ROLE_INSTANCE_ID = 0 -e WEBSITE_INSTANCE_ID = xxx -e HTTP_LOGGING_ENABLED = 1 xxx.azurecr.io/xxx:558

===== DOCKER LOG =========

2018_08_23_RD0003FF2D0408_default_docker.log:

2018-08-23T14:12:49.755843301Z [40m [1m [33mwarn [39m [22m [49m:Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager [35]

2018-08-23T14:12:49.755897801Z未配置XML加密器。密钥{xxx-xxx-xxx-xxx-xxx}可以以未加密的形式保存到存储中。

2018-08-23T14:12:54.761216323Z [40m [1m [33mwarn [39m [22m [49m:Microsoft.AspNetCore.Server.Kestrel [0]

2018-08-23T14:12:54.761251623Z覆盖地址'http://+:80'。绑定到UseKestrel()中定义的端点。

2018-08-23T14:12:54.908189021Z主机环境:生产

2018-08-23T14:12:54.908386123Z内容根路径:/ app

2018-08-23T14:12:54.908961927Z现在听:http://0.0.0.0:5001

2018-08-23T14:12:54.909256229Z申请开始。按Ctrl + C关闭。

2018_08_23_RD0003FF2D0408_docker.log:

2018-08-23 14:12:44.125 INFO - 由于AppFrameworkVersionChange和appFrameworkVersion = xxx.xxx.io/xxx:558而回收容器

2018-08-23 14:12:45.900 INFO - 为站点启动容器

2018-08-23 14:12:45.900 INFO - docker run -d -p 30464:5001 --name xxx -e DOCKER_CUSTOM_IMAGE_NAME = xxx.azurecr.io / xxx:549 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE = false -e WEBSITES_PORT = 5001 -e WEBSITE_SITE_NAME = xxx -e WEBSITE_AUTH_ENABLED = False -e WEBSITE_ROLE_INSTANCE_ID = 0 -e WEBSITE_INSTANCE_ID = xxx -e HTTP_LOGGING_ENABLED = 1 xxx.xxx.io/xxx:558

2018-08-23 14:12:55.972 INFO - 站点xxx的容器xxx已成功初始化。

2018-08-23 14:12:55.976 INFO - 由于AppSettingsChange和isMainSite = True而回收容器

2018-08-23 14:12:56.099 INFO - 为站点启动容器

2018-08-23 14:12:56.100 INFO - docker run -d -p 13940:5001 --name xxx -e DOCKER_CUSTOM_IMAGE_NAME = xxx.azurecr.io / xxx:558 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE = false -e WEBSITES_PORT = 5001 -e WEBSITE_SITE_NAME = xxx -e WEBSITE_AUTH_ENABLED = False -e WEBSITE_ROLE_INSTANCE_ID = 0 -e WEBSITE_INSTANCE_ID = xxx -e HTTP_LOGGING_ENABLED = 1 xxx.azurecr.io/xxx:558

2018-08-23 14:13:05.385 INFO - 站点xxx的容器xxx已成功初始化。

azure docker containers dockerfile azure-web-app-service
2个回答
3
投票

我们回答了你关于Github和Reddit的问题。在此处重新发布我们的回复以获得可见性

“目前,有一种解决方法:您应该将默认的resolv.conf修改为自定义DNS IP,然后通过在入口点脚本中添加COPY命令并指向自定义resolv.conf,在docker build上添加自定义resolv.conf到/等。

但是,我们正在研究一个更好的解决方案,因此无需手动更新resolv.conf,敬请期待。“


2
投票

您不应该使用DNS与微服务进行通信,而应该使用service registry

检查这个Microsoft paper谈论这个:

每个微服务都有一个唯一的名称(URL),用于解析其位置。您的微服务需要在运行的任何地方都可以寻址。如果你必须考虑哪台计算机正在运行特定的微服务,事情就会很快变坏。与DNS解析特定计算机的URL的方式相同,您的微服务需要具有唯一名称,以便可以发现其当前位置。微服务需要可寻址的名称,使它们独立于运行它们的基础结构。这意味着您的服务部署方式与发现方式之间存在交互,因为需要有服务注册表。同样,当计算机出现故障时,注册服务必须能够指示服务现在在哪里运行。

如您所见,最佳解决方案将取决于您的部署模型。查看有关容器的说明:

在一些微服务部署环境(称为集群,将在后面的部分中介绍)中,服务发现是内置的。例如,在Azure容器服务环境中,带有Marathon的Kubernetes和DC / OS可以处理服务实例注册和注销。它们还在扮演服务器端发现路由器角色的每个群集主机上运行代理。另一个例子是Azure Service Fabric,它还通过其开箱即用的命名服务提供服务注册表。

希望能帮助到你!

© www.soinside.com 2019 - 2024. All rights reserved.