‹ 首页

networking

@chaterm · 收录于 1 周前

Docker 容器网络

适合你,如果需要在 Docker 环境中处理容器间通信或网络配置。

/ 下载安装
networking.skill双击,或拖进 Claude 桌面版 / Cowork,即完成安装↓ .skill↓ .zip
用别的 agent?下载 .zip 解压,把文件夹放进它的技能目录
Claude Code~/.claude/skills/(项目级 .claude/skills/)
Codex CLI~/.codex/skills/
Cursor自动读取上面两处目录
其他工具见其文档的「skills」目录;两个下载是同一份文件,只是名字不同
/ 通过 npx 安装 校验哈希
npx oh-my-skill add chaterm/terminal-skills/networking
/ 通过 bash 安装
curl -fsSL https://oh-my-skill.com/install.sh | bash -s -- chaterm/terminal-skills/networking
/ 已经装过?验证本机副本,不用重装
npx oh-my-skill verify chaterm/terminal-skills/networking
安装目标可用 --agent / --scope 或 --to 明确指定;省略时只会在唯一已存在的 agent 目录上自动选择,零命中或多命中会停止并提示。content_hash 缺失或不一致均拒装。
48GitHub stars
~1.5K上下文体积 · 单文件
镜像托管

怎么用

技能原文 SKILL.md作者撰写 · Apache-2.0 · 464c295

Docker 容器网络

概述

容器网络模式、跨主机通信等技能。

网络驱动
网络类型
# bridge(默认)- 单主机容器通信
# host - 共享主机网络
# none - 无网络
# overlay - 跨主机通信(Swarm)
# macvlan - 分配 MAC 地址
查看网络
# 列出网络
docker network ls

# 网络详情
docker network inspect bridge
docker network inspect network_name

# 查看容器网络
docker inspect container_name --format '{{json .NetworkSettings.Networks}}'
Bridge 网络
默认 bridge
# 容器使用默认 bridge
docker run -d --name web nginx

# 查看 IP
docker inspect web --format '{{.NetworkSettings.IPAddress}}'

# 默认 bridge 容器间通过 IP 通信
# 不支持容器名解析
自定义 bridge
# 创建网络
docker network create mynet
docker network create --driver bridge --subnet 172.20.0.0/16 mynet

# 使用自定义网络
docker run -d --name web --network mynet nginx
docker run -d --name api --network mynet myapi

# 自定义网络支持容器名解析
docker exec api ping web
连接多个网络
# 创建网络
docker network create frontend
docker network create backend

# 容器连接多个网络
docker run -d --name app --network frontend myapp
docker network connect backend app

# 断开网络
docker network disconnect frontend app
Host 网络
# 使用主机网络
docker run -d --network host nginx

# 容器直接使用主机端口
# 无需端口映射
# 性能最好,但端口可能冲突
None 网络
# 无网络
docker run -d --network none myapp

# 完全隔离,无网络访问
# 适用于安全敏感场景
端口映射
# 映射端口
docker run -d -p 8080:80 nginx              # HOST:CONTAINER
docker run -d -p 80:80 -p 443:443 nginx     # 多端口
docker run -d -p 127.0.0.1:8080:80 nginx    # 绑定特定 IP
docker run -d -P nginx                       # 随机端口

# 查看端口映射
docker port container_name
DNS 配置
# 自定义 DNS
docker run -d --dns 8.8.8.8 nginx
docker run -d --dns 8.8.8.8 --dns 8.8.4.4 nginx

# 自定义主机名
docker run -d --hostname myhost nginx

# 添加 hosts 记录
docker run -d --add-host db:192.168.1.100 nginx
网络别名
# 创建网络
docker network create mynet

# 使用别名
docker run -d --name web --network mynet --network-alias webserver nginx

# 其他容器可通过别名访问
docker run --rm --network mynet busybox ping webserver
Overlay 网络(Swarm)
# 初始化 Swarm
docker swarm init

# 创建 overlay 网络
docker network create -d overlay myoverlay

# 创建可附加的 overlay(非 Swarm 服务也可使用)
docker network create -d overlay --attachable myoverlay

# 在服务中使用
docker service create --name web --network myoverlay nginx
Macvlan 网络
# 创建 macvlan 网络
docker network create -d macvlan \
    --subnet=192.168.1.0/24 \
    --gateway=192.168.1.1 \
    -o parent=eth0 \
    mymacvlan

# 使用 macvlan
docker run -d --network mymacvlan --ip 192.168.1.100 nginx

# 容器获得独立 MAC 地址,可直接在物理网络通信
网络诊断
容器内诊断
# 进入容器
docker exec -it container_name sh

# 网络工具
apt-get update && apt-get install -y iputils-ping curl netcat-openbsd

# 或使用 netshoot
docker run -it --network container:target_container nicolaka/netshoot
常用诊断命令
# 查看容器 IP
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name

# 查看网络中的容器
docker network inspect mynet -f '{{range .Containers}}{{.Name}} {{.IPv4Address}}{{"\n"}}{{end}}'

# 测试连通性
docker exec container1 ping container2
docker exec container1 curl http://container2:80
常见场景
场景 1:容器间通信
# 创建网络
docker network create app-network

# 启动数据库
docker run -d --name db --network app-network postgres

# 启动应用(通过容器名访问数据库)
docker run -d --name app --network app-network \
    -e DATABASE_URL=postgres://db:5432/mydb \
    myapp
场景 2:隔离前后端
# 创建网络
docker network create frontend
docker network create backend

# 前端只在 frontend
docker run -d --name nginx --network frontend -p 80:80 nginx

# 后端连接两个网络
docker run -d --name api --network frontend myapi
docker network connect backend api

# 数据库只在 backend
docker run -d --name db --network backend postgres
场景 3:调试网络问题
# 使用 netshoot 调试
docker run -it --rm --network container:target nicolaka/netshoot

# 常用命令
ip addr
ss -tlnp
curl -v http://service:port
tcpdump -i eth0
nslookup service_name
场景 4:限制网络带宽
# 使用 tc 限制带宽(需要 NET_ADMIN 权限)
docker run -d --cap-add NET_ADMIN myapp

# 在容器内
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
故障排查

| 问题 | 排查方法 | |------|----------| | 容器间无法通信 | 检查是否在同一网络 | | DNS 解析失败 | 检查是否使用自定义网络 | | 端口无法访问 | 检查端口映射、防火墙 | | 网络性能差 | 考虑使用 host 网络 |

# 检查网络配置
docker network inspect network_name

# 检查容器网络
docker inspect container_name | jq '.[0].NetworkSettings'

# 检查 iptables 规则
iptables -L -n -t nat
按 Apache-2.0 许可原样转载,未经改动 · 在 GitHub 查看 →

评论

登录即可评论;带「已验证安装」的,是发布者名下有本店的安装或持有记录。