环境说明
1、openEuler22.03虚拟机,默认启动了firewalld防火墙。
2、该虚拟上部署了某项系统服务,依赖k3s,即k8s的基础简化版。
3、k3s服务的启动,又依赖于docker的启动。
现象
重启虚拟机后,系统的cpu与内存利用率都很低,很明显,各项服务都未正常启动。
手动启动docker服务报错。
bash
## 启动docker服务
systemctl start docker
## docker服务报错
Job for docker.service failed because the control process exited with error code.
## 查看docker服务状态
systemctl status docker
## docker状态如下
× docker.service - Docker Application Container Engine
Loaded: loaded (/etc/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sat 2026-01-24 14:28:20 CST; 25s ago
Docs: https://docs.docker.com
Process: 30537 ExecStart=/usr/bin/dockerd (code=exited, status=1/FAILURE)
Main PID: 30537 (code=exited, status=1/FAILURE)
1月 24 14:28:20 AsiaInfo-Endpoint-Security-Protection systemd[1]: docker.service: Scheduled restart job, restart cou>
1月 24 14:28:20 AsiaInfo-Endpoint-Security-Protection systemd[1]: Stopped Docker Application Container Engine.
1月 24 14:28:20 AsiaInfo-Endpoint-Security-Protection systemd[1]: docker.service: Start request repeated too quickly.
1月 24 14:28:20 AsiaInfo-Endpoint-Security-Protection systemd[1]: docker.service: Failed with result 'exit-code'.
1月 24 14:28:20 AsiaInfo-Endpoint-Security-Protection systemd[1]: Failed to start Docker Application Container Engin>
此时k3s服务手动启动,也报错
bash
## 启动k3s
systemctl start k3s
## 回显报错
Job for k3s.service failed because the control process exited with error code.
See "systemctl status k3s.service" and "journalctl -xeu k3s.service" for details.
## 查看k3s状态
systemctl status k3s
## 回显如下
● k3s.service - Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: disabled)
Active: activating (auto-restart) (Result: exit-code) since Sat 2026-01-24 14:23:06 CST; 1s ago
Docs: https://k3s.io
Process: 17108 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service 2>/dev/nu>
Process: 17111 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
Process: 17113 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Process: 17115 ExecStart=/usr/local/bin/k3s server --write-kubeconfig /xdrDataLog/linkOneData/persist/kubeconfig>
Main PID: 17115 (code=exited, status=1/FAILURE)
原因
经一系列排查,发现关闭防火墙后,docker能正常启动,此时查看docker配置文件。
bash
## 此处为机器上的docker文件
cat /etc/docker/daemon.json
## 文件内容如下
{
"log-opts": {
"max-size": "100m",
"max-file": "5"
},
"bip": "11.23.45.2/16",
"data-root": "/xdrDataLog/linkOneData/docker"
}
是因为docker默认设置了自己的桥接网络,配置iptables规则,与firewalld冲突,两个系统都试图管理相同的网络资源,导致冲突。无法启动。
解决方案
ai推荐的解决方案如下,需将所有服务重启后验证,目前未验证。
获取docker信息
防火墙先关闭,将docker运行起来后,查看信息。
bash
# 查看接口详情
ip addr show docker0
# 或者
ifconfig docker0
设置新防火墙规则
启动防火墙,设置添加新规则,单独设立docker的区域
bash
# 1. 创建新的防火墙区域
sudo firewall-cmd --permanent --new-zone=docker-network
# 2. 设置区域策略
sudo firewall-cmd --permanent --zone=docker-network --set-target=ACCEPT
# 3. 添加docker0接口到该区域
sudo firewall-cmd --permanent --zone=docker-network --add-interface=docker0
# 4. 添加您的Docker网络地址段
sudo firewall-cmd --permanent --zone=docker-network --add-source=11.23.0.0/16
# 5. 允许Docker端口
sudo firewall-cmd --permanent --zone=docker-network --add-port=2375/tcp
sudo firewall-cmd --permanent --zone=docker-network --add-port=2376/tcp
# 6. 重新加载防火墙配置
sudo firewall-cmd --reload
# 7. 验证配置
sudo firewall-cmd --list-all --zone=docker-network
# 8. 重启docker
sudo systemctl restart docker
# 9. 验证Docker状态
sudo systemctl status docker
添加后的规则详情如下:
