gpt4 book ai didi

windows - 用于服务发现的Docker DNS无法按名称解析Windows Container的地址

转载 作者:行者123 更新时间:2023-12-02 18:23:16 25 4
gpt4 key购买 nike

使用Docker Windows Containers,我想超越仅一个运行App的Docker容器。如Microsoft docs标题“Docker Compose and Service Discovery”下所述:

Built in to Docker is Service Discovery, which handles service registration and name to IP (DNS) mapping for containers and services; with service discovery, it is possible for all container endpoints to discover each other by name (either container name, or service name).



而且由于 docker-compose允许您在其Yaml文件中使用 define services,因此应该可以通过那里的名称(例如提醒 difference between services and containers in docker-compose)来发现(例如pinging)。该 blog post by Microsoft提供了一个完整的示例,其中包含 webdb服务,包括带有所需 docker-compose.yml in the GitHub repo的完整源代码。

我的问题是: Docker Windows容器有时只会彼此“发现”,有时根本不会。我用 docker inspect <container-id>检查了它们,并在其中存在别名 dbweb。但是,当我将Powershell放入一个容器中(例如通过 docker exec -it myapps_web_1 powershell放入一个Web容器)并尝试执行 ping db 时,这种方法仅偶尔起作用

并且在这里让我清楚(因为恕我直言,文档不是):对于非docker-compose方案,此问题相同。构建 example app without compose时,如果没有docker-compose服务,也出现了问题,只是普通的旧容器名称!

关于这种奇怪行为有什么想法吗? 对我来说,随着更多应用程序的使用,这种情况变得更糟。有关更多详细信息,请查看 https://github.com/jonashackt/spring-cloud-netflix-docker,其中有一个带有Spring Boot和Spring Cloud Eureka/Zuul和4个docker-compose服务的示例项目,其中weatherbackend和weatherbackend-second可以轻松扩展-例如通过 docker compose scale weatherbackend=3

我的 Windows Vagrant box是通过 packer.io构建的,并基于最新的 Windows Server 2016 Evalutation ISO。必要的Windows功能和Docker/docker-compose安装 is done with Ansible

由于没有解决此问题的方法,因此Docker Windows容器对于我们的客户几乎变得不可用。

最佳答案

经过一两个星期的尝试解决此问题后,我终于找到了解决方案。从阅读此docker/for-win/issues/500开始,我找到了这个multicontainer example application source的链接,其中一位作者将解决方案作为副业记录了下来,并命名为:

Temporary workaround for Windows DNS client weirdness



将以下内容放入您的Dockerfile中将解决DNS问题:
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]
RUN set-itemproperty -path 'HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters' -Name ServerPriorityTimeLimit -Value 0 -Type DWord

(要了解Dockerfiles中Powershell命令的执行方式,请查看 Dockerfile reference)

问题也是 discussed here,解决方案将有望找到它进入官方Docker镜像的方式(或至少进入文档)。

关于windows - 用于服务发现的Docker DNS无法按名称解析Windows Container的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43041297/

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