资讯动态

Weave Net 不使用 Docker API Proxy 启动容器:从 `weave run` 到 `docker run + weave attach` 的完整迁移指南

发布时间:2026/10/9 2:54:32 来源:尧图企业网站定制
网络云原生【免费下载链接】weaveSimple, resilient multi-host containers networking and more.项目地址https://gitcode.com/gh_mirrors/weave4/weave点击查看免费下载导读本文面向仍在使用早期 Weave Net 脚本化工作流如weave run、weave start、weave restart的开发者讲解这些命令为何在 Weave Net 2.0 中被移除以及如何在不启用 Docker API Proxy的前提下通过组合docker run与weave attach实现完全等价的效果。读完后你将掌握weave attach/weave detach的完整参数用法、动态附加多网络的实操方法以及命令背后在仓库源码中的实现原理。背景weave run是什么为什么被移除在 Weave Net 的早期版本中项目提供了一条名为weave run的便捷命令它一次性完成“运行容器 将容器附加到 Weave 网络”两件事让用户不必分别调用docker run和 Weave 网络接入逻辑。然而正如官方文档 launching-without-proxy.md 所指出这条命令“一直存在局限”always had limitations。随着 Weave Net 演进项目提供了两条没有这些局限的替代路径Weave Net Docker API Proxy以透明代理的方式拦截 Docker 客户端与 daemon 之间的通信在容器通过普通docker run创建/启动时自动完成 IP 分配与网络接入用户无需感知任何 Weave 专属命令。Docker 网络插件Network Plugin通过--net参数接入见 plugin.md 与 plugin-v2.md。由于这两条路径已能覆盖weave run的全部使用场景且不再受其限制项目决定移除weave run同时一并移除了用途相近的weave start与weave restart。从当前仓库的weave脚本可以找到这一移除的直接证据。脚本中run|start|restart|launch-plugin|stop-plugin|launch-proxy|stop-proxy|launch-router|stop-router分支会统一输出The weave $COMMAND command has been removed as of Weave Net version 2.0 Please see release notes for further information exit 1对应源码见 weave。也就是说如果你仍然在脚本或 CI 流水线中调用这些命令会立即收到明确的“已在 2.0 中移除”的错误提示而不是被静默忽略。核心替代方案docker runweave attach组合官方文档给出的迁移路径非常明确如果现有脚本使用了weave run可以用docker run与weave attach的组合达到完全相同的效果详细操作见 dynamically-attach-containers.md。基本用法如下以下命令在未启用 Proxy、DOCKER_HOST指向 Docker daemon 的环境下执行host1$ C$(docker run -e WEAVE_CIDRnone -dti weaveworks/ubuntu) host1$ weave attach $C 10.2.1.3逐段解释C$(docker run -e WEAVE_CIDRnone -dti weaveworks/ubuntu)启动一个容器并把容器 ID 存入变量C。这里的关键是环境变量WEAVE_CIDRnone它告诉 Weave 不要自动为容器分配/附加网络地址从而把“附加”的动作推迟到下一步显式执行。weave attachWeave Net 提供的、把运行中的容器动态附加到 Weave 网络的命令。10.2.1.3weave attach成功后的输出即由 IPAM 为容器分配的 IP 地址此处来自默认子网。注意如果你同时在使用 Weave Docker API ProxyProxy 会修改DOCKER_HOST指向自身。此时要复现上面的“先创建、后手动附加”流程必须通过-e WEAVE_CIDRnone明确禁止容器在启动时被自动附加到 Weave 网络。在weave脚本中attach分支的实现路径清晰可循见 weave它依次完成 CIDR 参数收集、通过 IPAM 分配/获取地址ipam_cidrs allocate、可选地重写/etc/hosts--rewrite-hosts、调用底层attach-container附加 veth 设备最后输出分配到的地址。附加时自动注册 WeaveDNSweave attach还有一个自动化的便利行为如果容器的主机名带有域名FQDN它会自动把该域名注册进 WeaveDNS除非用--without-dns参数关闭。例如host1$ docker run -dti --namec1 --hostnamec1.weave.local weaveworks/ubuntu host1$ weave attach c1 10.32.0.1 host1$ weave dns-lookup c1 10.32.0.1这里容器以c1.weave.local作为 FQDN 启动weave attach c1后该名字即可通过weave dns-lookup解析到分配到的 Weave IP。脚本中这一行为由with_container_fqdn ... put_dns_fqdn实现见 weave。重写容器/etc/hosts如果你希望容器内的/etc/hosts包含 Weave Net 分配的地址与 Proxy 的默认行为一致可以在执行weave attach时附加--rewrite-hosts参数host1$ weave attach --rewrite-hosts c1该参数通过util_op rewrite-etc-hosts调用底层工具重写/etc/hosts文件注意脚本会“unlink 该文件”使其脱离 Docker 的管理但保留有效内容对应实现见 weave。重写的具体逻辑由 prog/weaveutil/attach.go 中的rewriteEtcHosts完成它读取容器的HostsPath拼接Hostname . Domainname构成 FQDN解析要写入的 CIDR并通过proxy.StubProxy复用 Proxy 侧的RewriteEtcHosts逻辑——这也解释了为何该功能与 Proxy 行为保持一致。动态分离容器weave detach容器可以被动态地从某个子网中分离出来使用weave detach命令host1$ weave detach $C 10.2.1.3在weave脚本中detach分支的执行顺序与attach对称见 weave先收集 CIDR 参数再通过 IPAM 查询ipam_cidrs lookup当前地址调用底层detach-container移除 veth 与地址清理 WeaveDNS 中对应的 FQDN 记录最后把分离的 IP 归还给 IPAM。多网络场景分离、切换与共享weave attach/weave detach的真正价值体现在多网络管理上以下是文档中的几种典型操作。先从当前网络分离再附加到另一个网络网络切换host1$ weave detach net:default $C 10.2.1.3 host1$ weave attach net:10.2.2.0/24 $C 10.2.2.3把同一容器同时附加到多个应用网络容器跨应用共享host1$ weave attach net:default 10.2.1.3 host1$ weave attach net:10.2.2.0/24 10.2.2.3一次命令附加或分离多个地址host1$ weave attach net:default net:10.2.2.0/24 net:10.2.3.0/24 $C 10.2.1.3 10.2.2.3 10.2.3.1 host1$ weave detach net:default net:10.2.2.0/24 net:10.2.3.0/24 $C 10.2.1.3 10.2.2.3 10.2.3.1这里net:default表示“默认子网”net:cidr表示指定的子网。脚本中的collect_cidr_args负责识别net:default、net:cidr、ip:cidr与裸 CIDR 等多种地址形态并统一解析见 weave随后交给 IPAM 按子网分配。重要提示通过动态方式附加的地址在容器重启后不会被自动重新附加。也就是说“动态附加”只对容器本次运行有效如果工作流依赖容器重启后仍保持在 Weave 网络中应改用 Proxy 或插件这类会自动处理附加的接入方式。这一限制在 dynamically-attach-containers.md 中有明确标注。源码级原理动态附加是如何实现的动态附加不只是脚本层的命令拼装其底层有完整的实现链命令入口weave脚本的attach/detach分支解析参数后通过util_op attach-container/util_op detach-container调用 weaveutil 工具见 weave 与 weave。weaveutil 层prog/weaveutil/attach.go 中的attach函数负责解析--no-multicast-route、--keep-tx-on、--hairpin-modefalse等选项通过netns.GetFromPid打开容器的网络命名空间若容器运行在 host 网络命名空间如以--nethost启动则直接报错随后调用weavenet.AttachContainer完成真正的挂接。网络层net/veth.go 中的AttachContainer(netNSPath, id, ifName, bridgeName, mtu, withMulticastRoute, cidrs, keepTXOn, hairpinMode)负责创建 veth 对、把一端放入容器命名空间、另一端接入weave网桥并为容器配置 CIDR 地址DetachContainernet/veth.go则执行对称的拆除操作。这一调用链也印证了“为什么必须用容器 ID/名称而不是宿主机进程”来附加所有网络配置动作都发生在容器的网络命名空间内。三种接入方式的定位对比为了帮助你判断何时该用本文介绍的“无 Proxy”方式这里汇总 Weave Net 提供的三种容器接入途径详见 weave-docker-api.md接入方式使用形态特点适用场景Docker API Proxyweave launch后直接docker run自动分配 IP、自动附加、自动注册 DNS透明拦截 Docker API大多数常规工作负载无需感知 Weave 命令Docker 网络插件docker run --net ...走 Docker 网络插件框架与 Docker swarm 等生态集成更好使用--net参数、需要插件生态兼容的环境weave attach/weave detach先docker run后手动附加不经过 Proxy灵活控制附加时机与网络可多网络共享脚本迁移、容器启动时不确定目标网络的动态场景需要特别说明当容器以--net方式启动时Weave Docker API Proxy 会被自动禁用、不再参与附加见 weave-docker-api.md。而weave attach这种方式同样不经过 Proxy因此它是在“不想或不能启用 Proxy”时最直接的接入手段。迁移建议与总结把基于weave run的老脚本迁移到新工作流推荐按如下步骤进行检查脚本中的命令逐一替换weave run→docker run -e WEAVE_CIDRnone ... weave attach删除weave start、weave restart改用weave launch管理 Weave 自身的生命周期。选择接入方式如果只是希望容器“跑起来即在网络中”优先考虑启用 Proxyweave launch默认启动可用--proxyfalse关闭如果希望精确控制附加时机、或需要把同一容器挂到多个网络则使用weave attach/weave detach。留意持久性限制动态附加的地址在容器重启后不会恢复相关脚本需配合weave attach的重试逻辑或改用 Proxy/插件方案。验证 DNS 行为若容器主机名带域名weave attach会自动注册 WeaveDNS如不需要记得加--without-dns。本文涉及的完整操作示例与命令语义均来自仓库文档 launching-without-proxy.md 与 dynamically-attach-containers.md命令的实际行为与移除提示可在 weave 与 weave 中直接验证。掌握docker run weave attach这套组合即可在完全不依赖 Docker API Proxy 的前提下获得与旧版weave run完全等价的启动与网络接入能力。赞分享网络云原生【免费下载链接】weaveSimple, resilient multi-host containers networking and more.项目地址https://gitcode.com/gh_mirrors/weave4/weave点击查看免费下载相关推荐Weave Net 动态挂载与卸载容器weave attach / detach 完整实战指南Weave Net 动态挂载与卸载容器weave attach / detach 完整实战指南 Weave Net 支持在容器已经运行之后动态地将其挂载a网络云原生Weave Net 运维实战停止、重置与安全移除 Peerweave stop / weave reset / weave rmpeerWeave Net 运维实战停止、重置与安全移除 Peerweave stop / weave reset / weave rmpeer Weave Ne网络云原生Weave Net Docker Proxy 的自动 IP 分配IPAM Proxy完全指南从默认分配到 --no-default-ipalloc 模式Weave Net Docker Proxy 的自动 IP 分配IPAM Proxy完全指南从默认分配到 no default ipalloc 模式 导读网络云原生上一篇tiny11builder 使用指南从官方 ISO 生成轻量 Windows 11 安装镜像下一篇70%成本削减ADK-Python实现Google搜索智能缓存的完整方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑