feat(networks): add isolated Docker project networks#304
Conversation
|
PR Title: feat(networks): add isolated Docker project networ... Commit: 本 PR 引入了隔离式 Docker 项目网络(isolated Docker project networks)功能,核心改动包括:
整体架构清晰,测试覆盖较全。但在 IPv6 地址处理、网络清理的健壮性以及端口规范化逻辑上存在可改进之处。 |
| items = append(items, item) | ||
| } | ||
| return items, nil | ||
| } |
There was a problem hiding this comment.
normalizePublishedPort 对 IPv6 地址格式化错误导致下游解析失败
net.ParseIP 接受 IPv6 地址(如 ::1、2001:db8::1),但函数随后用 fmt.Sprintf("%s:%d:%d/%s", hostIP, hostPort, containerPort, protocol) 格式化时未对 IPv6 地址加方括号。这将生成类似 ::1:8080:8080/tcp 的字符串,与 IPv6 地址语法冲突,导致下游 mergeDockerNetworkPortConfig 按 : 分割时解析失败。
Problem code:
Changed code at pkg/compose/network_config.go:85
Recommendation:
在格式化前检查 net.ParseIP 返回的 IP 是否为 IPv6;如果是,应使用 [<ipv6>] 包裹,或直接拒绝 IPv6 地址(与当前仅支持 bridge/TCP 的设计保持一致)。同时更新 mergeDockerNetworkPortConfig 的解析逻辑以兼容带方括号的 IPv6。
There was a problem hiding this comment.
@mokeyscan 当前解析路径不会生成评论中的错误 canonical 字符串:normalizePublishedPort 先按冒号拆分且只接受 1~3 段,因此无方括号或带方括号的 IPv6 都会在进入 net.ParseIP 和格式化之前被拒绝。当前配置与下游 canonical 格式有意只支持 IPv4,文档也未承诺 IPv6。17cf623 已补充两种 IPv6 写法均被拒绝的回归测试;未来若支持 IPv6,需要连同 bracketed 语法和下游解析一起设计。
|
PR Title: feat(networks): add isolated Docker project networ... Commit: 本次变更包含三部分:
整体设计合理:对并发删除的容错处理避免了清理流程因竞态条件而中断,测试覆盖完整。IPv6 端口测试用例与现有测试风格一致。未发现引入新缺陷或回归风险。 |
Summary
networkproject option with Compose-style namednetworks, per-agent attachments,expose, and loopback-defaultportsTesting
GOFLAGS=-buildvcs=false go test ./...GOFLAGS=-buildvcs=false task lint GO_BUILD_CACHE_DIR="$GOCACHE" GOLANGCI_LINT_CACHE_DIR="$GOLANGCI_LINT_CACHE"— 0 issuesGOFLAGS=-buildvcs=false task build GO_BUILD_CACHE_DIR="$GOCACHE"task test GO_BUILD_CACHE_DIR="$GOCACHE"AGENT_COMPOSE_REPO_ROOT="$PWD" bash ../../data/ai_analyse/ai-test-suit/suit-docker-network/test/bin/run.sh— 29/29 cases passed, with no leftover suite containers or networksChecklist