记录一次docker+k3s+防火墙规则冲突,导致服务无法正常启动的现象。

环境说明

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

添加后的规则详情如下:

相关推荐
承渊政道1 小时前
飞牛NAS部署Immich:搭建家庭相册并实现远程访问
运维·服务器·docker·内网穿透·cpolar·nas·immich
x-cmd1 小时前
用 Rust 打造 AI 时代的 SQL:把重复任务变成可执行文件
数据库·人工智能·sql·ai·容器·rust·workflow
ruofu332 小时前
如何让docker使用提前下载好的镜像,而不是在线拉取
java·spring cloud·docker
童槿顏丶16 小时前
docker自动化部署脚本
docker·eureka·自动化
爱莉希雅&&&18 小时前
K8s NFS+StorageClass+PV/PVC+Deployment 实战笔记
笔记·容器·kubernetes
GlueNa2SiO319 小时前
06-Docker存储与数据持久化
笔记·学习·docker
一位正在转型AI全栈的前端工程师20 小时前
前端转全栈:从 502 到 200,我的第一个 Docker+Nginx+Node.js 项目
docker·容器
jason_renyu21 小时前
Linux Docker 服务管理与排查实战指南(新手速查版)
linux·docker·新手docker学习·docker日志查询·docker服务管理
童槿顏丶21 小时前
Jenkins部署(Docker)
java·docker·jenkins
维核科技21 小时前
大模型私有化部署:Docker与Kubernetes实战避坑
docker·容器·kubernetes