首页 > 解决方案 > 重新加载 docker stack 网络配置

问题描述

我有多个通过同一网络连接的 docker 堆栈。如果我重新启动其中一个堆栈,相关堆栈容器的内部 IP 地址似乎会发生变化。这会导致其他堆栈和容器中的服务名称解析错误。内部 docker 名称服务似乎无法识别网络更改。

如果尝试通过服务名称(例如ping my_stack_my_container_name)从堆栈容器外壳 ping 访问其他容器,我会从错误的 IP 地址成功返回。当我使用完整的容器名称 ( ping my_stack_my_container_name.134.134234234123) 时,返回来自正确的 IP。

有什么方法可以触发堆栈网络/名称服务的重新加载?

标签: dockernetworkingdocker-swarm

解决方案


你确定它没有重新加载?检查 docker 容器(应该连接到重新加载的容器)是否没有缓存 DNS 查询结果。我在 haproxy 配置中遇到了同样的问题,我放置了以下几行来强制 haproxy 仅保留 1s 的值:

resolvers docker
    # well known docker dns server address
    nameserver dns 127.0.0.11:53
    #HAProxy will hold name-ip mapping for 1s, so for each request new container ip will be resolved, balancing load
    hold valid 1s 

(...)

backend stackName_app_backend
    server stackName_app_service stackName_ServiceName:80 resolvers docker check

推荐阅读