重新加载docker stack网络配置

时间:2018-06-21 12:33:20

标签: docker networking docker-swarm

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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