networking

# bridge(默认)- 单主机容器通信 # host - 共享主机网络 # none - 无网络 # overlay - 跨主机通信(Swarm) # macvlan - 分配 MAC 地址

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "networking" with this command: npx skills add chaterm/terminal-skills/chaterm-terminal-skills-networking

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

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

cron

No summary provided by upstream source.

Repository SourceNeeds Review
General

system-admin

No summary provided by upstream source.

Repository SourceNeeds Review
General

systemd

No summary provided by upstream source.

Repository SourceNeeds Review