docker默认不启用selinux支持,需同时满足宿主机enforcing模式、dockerd配置"selinux-enabled":true、安装selinux策略及插件三条件;启用后通过ps auxz验证container_t上下文生效。

Docker 默认不启用 SELinux 支持,即使宿主机已开启 SELinux。是否启用取决于 Docker 守护进程(dockerd)的配置,而非容器运行时自动继承系统状态。
启用 SELinux 支持的必要条件
必须同时满足以下三点,SELinux 才会对容器生效:
- 宿主机内核已启用 SELinux(
getenforce返回 Enforcing 或 Permissive) - Docker 守护进程启动时明确启用
--selinux-enabled(或配置文件中设为true) - 系统安装了 SELinux 策略包(如
selinux-policy-targeted)及 Docker 的 SELinux 插件(如docker-selinux,部分发行版已整合)
启用方式:修改 daemon.json 配置
推荐使用 JSON 配置文件方式(路径:/etc/docker/daemon.json),添加或确认以下内容:
{
"selinux-enabled": true,
"log-driver": "json-file",
"log-opts": { "max-size": "100m" }
}
保存后执行:sudo systemctl restart docker
再用 docker info | grep selinux 检查输出是否含 SELinux: true。
禁用 SELinux 支持的方法
有三种常用方式,效果一致但适用场景不同:
-
配置文件禁用:将
"selinux-enabled": false写入/etc/docker/daemon.json,重启 dockerd -
启动参数禁用:编辑
/lib/systemd/system/docker.service,在ExecStart=行末尾添加--selinux-enabled=false,然后重载并重启服务 -
临时绕过(单次容器):运行容器时加
--security-opt label:disable,该选项会跳过当前容器的 SELinux 标签限制,不影响其他容器
验证是否真正生效
仅看 docker info 不够,需结合进程标签确认:
- 启动一个容器:
docker run -d --name test alpine sleep 300 - 在宿主机执行:
ps auxZ | grep test - 若看到类似
system_u:system_r:container_t:s0:c123,c456的上下文,说明 SELinux 已介入;若显示system_u:system_r:spc_t:s0或无上下文字段,则未启用或被禁用











