docker容器的网络管理
前言
docker在使用的过程中,总是有很多被忽略的小细节,这种在很多容器提供的命令中并不会写明,或者提供方法,这次就把docker网络中的一些操作写出来:
- docker运行容器的时候,并不会关注使用哪个容器网络,其实在启动新的容器的时候,总是会创建一个新的network,命令一看,已经创建了一堆网络了,不过他的创建逻辑我也没去研究,有的时候会使用已有的网络;
- 使用一些并不开源的容器的时候,总是会担心其安全性,虽然很多是内网环境,并不会被公网访问,但是容器是能上网的,这个就有操作空间了,家用的时候也不可能经常去检查容器行为,当然可以在路径部署一个监控节点,但直接禁用容器上网,来的更方便省事。
问题解决
容器网络的选择和自定义
常用的命令格式:
- 命令格式:
1 | docker run -d \ |
- dockercompose格式:
1 | version: '3.8' # 指定Compose文件版本(推荐3.8,兼容性好) |
命令详细信息表格(点击展开)
- 创建网络(
docker network create)常用参数
| 参数 | 核心作用 | 实用示例 | 补充说明 |
|---|---|---|---|
--name |
指定网络名称(必选) | --name my-app-network |
名称需唯一,避免与现有网络冲突 |
--driver / -d |
指定网络驱动类型 | --driver bridge |
常用:bridge(默认)、overlay(集群)、macvlan(物理网卡绑定) |
--subnet |
指定子网网段(CIDR格式) | --subnet 172.25.0.0/16 |
自定义IP段,避免与宿主机/其他网络冲突 |
--gateway |
指定网络网关地址 | --gateway 172.25.0.1 |
需在 --subnet 网段内,是容器访问外网的出口 |
--ip-range |
指定IP分配范围 | --ip-range 172.25.0.0/24 |
限制容器从该网段分配IP,缩小分配范围 |
--opt / -o |
自定义网络选项 | --opt com.docker.network.bridge.name=mybr0 |
常用选项: - mtu=1500(修改MTU值)- com.docker.network.bridge.enable_ip_masquerade=true(开启IP伪装) |
--attachable |
允许非Compose容器接入overlay网络 | --attachable |
仅适用于Swarm集群的overlay网络 |
- Docker 核心网络驱动类型(按使用频率排序)
| 驱动类型 | 核心用途 | 通信范围 | 核心特点 | 典型场景 | 性能 | 隔离性 |
|---|---|---|---|---|---|---|
bridge |
单机容器互通 | 仅宿主机内的容器 | Docker 默认驱动,创建隔离桥接网络,容器通过NAT访问外网;不同bridge网络默认不互通 | 单机部署的多容器应用(Web + 数据库) | 一般(NAT开销) | 中 |
host |
容器共享宿主机网络 | 与宿主机共享网络命名空间 | 无独立IP/端口,直接使用宿主机网络;无网络隔离 | 对网络性能要求极高的场景(高性能服务) | 最高(无开销) | 低 |
none |
禁用容器网络 | 无网络(仅回环地址) | 仅保留lo回环接口,无外网/内网通信能力 | 无需网络的离线任务(数据处理容器) | - | 高 |
overlay |
跨主机容器互通 | Swarm集群内的所有节点 | 基于VXLAN封装,实现集群内多主机容器互通;需先初始化Swarm | Docker Swarm集群部署(跨主机服务通信) | 一般(VXLAN封装) | 中 |
macvlan |
容器接入物理网络 | 与宿主机同物理网络(二层) | 给容器分配物理网卡级别的MAC地址,容器像独立物理机 | 需要容器拥有物理网络IP的场景(网络设备模拟) | 高(二层转发) | 中 |
ipvlan |
轻量级物理网络接入 | 与宿主机同物理网络 | 比macvlan更轻量,多容器共享同一MAC地址,仅IP不同 | 大规模容器需独立IP但无需独立MAC的场景 | 高 | 中 |
remote |
第三方网络插件 | 由插件定义 | 对接第三方网络解决方案(Calico、Flannel) | K8s集成/复杂网络策略场景 | 依插件而定 | 依插件而定 |
容器禁用上网
1 | version: '3' |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HAHA!

