我有多个通过同一网络连接的Docker堆栈。如果我重新启动堆栈之一,则相关堆栈容器的内部ip地址似乎会更改。这会导致其他堆栈和容器中的服务名称解析错误。内部docker名称服务似乎无法识别网络更改。
如果尝试使用服务名称(例如ping my_stack_my_container_name
)从堆栈容器外壳通过ping访问其他容器,则我从错误的IP地址获得了成功返回。当我改用完整的容器名称(ping my_stack_my_container_name.134.134234234123
)时,返回的消息来自正确的IP。
有什么方法可以触发堆栈网络/名称服务的重新加载?
答案 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