配置内核参数与开启包转发功能
1. 加载 br_netfilter 模块
-
作用 :
br_netfilter模块用于将桥接的网络流量转发至iptables,从而让 Docker 的网络通信更顺畅。
-
加载模块 :
|-------------------------|
|modprobe br_netfilter|
| | -
验证模块是否加载成功 :
|-----------------------------|
|lsmod | grep br_netfilter|如果出现
br_netfilter和bridge,说明加载成功。 -
设置开机自动加载模块 :
-
创建文件
/etc/sysconfig/modules/br_netfilter.modules:|--------------------------------------------------|
|vi /etc/sysconfig/modules/br_netfilter.modules| -
写入以下内容:
|-------------------------------|
|#!/bin/bash|
|/sbin/modprobe br_netfilter| -
赋予执行权限:
|--------------------------------------------------------|
|chmod +x /etc/sysconfig/modules/br_netfilter.modules|
-
2. 修改内核参数
-
创建配置文件 :
|--------------------------------|
|vi /etc/sysctl.d/docker.conf| -
写入以下内容 :
|-------------------------------------------|
|net.bridge.bridge-nf-call-iptables = 1|
|net.bridge.bridge-nf-call-ip6tables = 1|
|net.ipv4.ip_forward = 1|net.bridge.bridge-nf-call-iptables:允许桥接流量通过iptables。net.bridge.bridge-nf-call-ip6tables:允许桥接流量通过ip6tables。net.ipv4.ip_forward:启用 IPv4 数据包转发功能。
-
加载内核参数使其生效 :
|---------------------------------------|
|sysctl -p /etc/sysctl.d/docker.conf|确保不会报错,否则需要检查是否提前加载了
br_netfilter模块。
3. 为什么需要这些参数
-
如果未开启
net.bridge.bridge-nf-call-iptables或net.bridge.bridge-nf-call-ip6tables,在安装 Docker 后可能会遇到如下报错:|---------------------------------------|
|bridge-nf-call-iptables is disabled|这会导致 Docker 的容器之间无法正常通信。
-
如果未开启
net.ipv4.ip_forward,当 Linux 主机有多个网卡时,数据包无法在不同网卡之间转发,也可能无法从外部访问 Docker 容器。
验证配置
1. 验证内核参数
-
查看内核参数是否生效:
|--------------------------------------|
|sysctl -a | grep 'bridge\|forward'| -
检查关键参数是否为
1:|-------------------------------------------|
|net.bridge.bridge-nf-call-iptables = 1|
|net.bridge.bridge-nf-call-ip6tables = 1|
|net.ipv4.ip_forward = 1|
2. 重启 Docker 并检查状态
-
重启 Docker 服务:
|----------------------------|
|systemctl restart docker| -
检查 Docker 状态是否正常:
|---------------------------|
|systemctl status docker|如果状态为
Active (Running),说明正常。
配置永久加载模块
1. 开机自动加载模块
-
在
/etc/modules-load.d下创建文件:|--------------------------------------------|
|vi /etc/modules-load.d/br_netfilter.conf| -
写入模块名称:
|----------------|
|br_netfilter|
| | -
保存后,重启主机时该模块会自动加载。
2. 设置自动生效的内核参数
- 内核参数已写入
/etc/sysctl.d/docker.conf文件,重启时会自动加载。
配置镜像加速器
1. 原因
- 默认情况下,Docker 从官方 Docker Hub 拉取镜像,但由于网络原因,速度可能非常慢。
- 配置国内镜像加速器(如阿里云)可以大幅提升拉取镜像的速度。
2. 步骤
-
创建或编辑文件
/etc/docker/daemon.json:|------------------------------|
|vi /etc/docker/daemon.json| -
写入以下内容(示例使用阿里云镜像加速器):
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|"registry-mirrors": ["https://docker.m.daocloud.io","https://gallery.ecr.aws","https://docker.lmirror.top","https://atomhub.openatom.cn","https://docker.m.daocloud.io/","https://huecker.io/","https://dockerhub.timeweb.cloud","https://noohub.ru/","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn","https://xx4bwyg2.mirror.aliyuncs.com","http://f1361db2.m.daocloud.io","https://registry.docker-cn.com","http://hub-mirror.c.163.com"],| -
重启 Docker 服务:
|----------------------------|
|systemctl restart docker|
总结
-
关键命令
-
加载
br_netfilter模块:|-------------------------|
|modprobe br_netfilter|
| | -
修改内核参数:
|---------------------------------------|
|sysctl -p /etc/sysctl.d/docker.conf| -
验证模块加载和内核参数:
|--------------------------------------|
|lsmod | grep br_netfilter|
|sysctl -a | grep 'bridge\|forward'| -
配置镜像加速器:
|---------------------------------------------|
|{|
|"registry-mirrors": ["https://<你的加速器地址>"]|
|}|
-
-
注意事项
- 在加载内核参数之前,必须先加载
br_netfilter模块,否则会报错。 - 修改内核参数后需要重启 Docker 服务,确保配置生效。
- 配置镜像加速器后建议测试镜像拉取速度。
- 在加载内核参数之前,必须先加载