docker - 重新加载 docker stack 网络配置
问题描述
我有多个通过同一网络连接的 docker 堆栈。如果我重新启动其中一个堆栈,相关堆栈容器的内部 IP 地址似乎会发生变化。这会导致其他堆栈和容器中的服务名称解析错误。内部 docker 名称服务似乎无法识别网络更改。
如果尝试通过服务名称(例如ping my_stack_my_container_name
)从堆栈容器外壳 ping 访问其他容器,我会从错误的 IP 地址成功返回。当我使用完整的容器名称 ( ping my_stack_my_container_name.134.134234234123
) 时,返回来自正确的 IP。
有什么方法可以触发堆栈网络/名称服务的重新加载?
解决方案
你确定它没有重新加载?检查 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
推荐阅读
- algorithm - 如何使用哈希函数解析给定的字母
- octobercms - 如何使用我的插件向 RainLab.Blog 添加帖子?
- node.js - Express Get 路由返回错误 500:"Cast to ObjectId failed for value"
- laravel - 为背包中的字段创建刀片文件?
- python - python中的Windows通知
- powerbi - 扩展 PowerQuery OAuth 身份验证功能(StartLogin、FinishLogin、Refresh、Logout)
- html - 为什么元素不在 div 中显示,尽管它在 div 中?
- linux - 如何以非交互方式启用/禁用 Linux 无人值守升级
- excel - VBA 用户窗体组合框
- mercurial - 是否可以通过 mercurial 跟踪软链接(ln -s)的文件的内容?