重新加载docker栈网络配置

Reload docker stack network configuration

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

如果尝试通过服务名称(例如 ping my_stack_my_container_name)从堆栈容器 shell ping 访问其他容器,我从错误的 IP 地址获得了成功 return。当我改用完整的容器名称 (ping my_stack_my_container_name.134.134234234123) 时,return 来自正确的 IP。

有什么方法可以触发堆栈 networking/name 服务的重新加载?

确定没有重新加载吗?检查 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