首页 > 其他分享 >【docker】如何运行没有Root权限的Docker?

【docker】如何运行没有Root权限的Docker?

时间:2025-01-21 13:09:51浏览次数:1  
标签:rootless Root user docker root Docker 运行

以下文章来源于运维自习室 ,作者运维自习室

Rootless模式的目的是让Docker守护进程以非root用户身份运行。该方案以实验特性的方式在v19.03版本引入,并在v20.10版本成为正式功能。

实践

官方文档已经做了详细的介绍,这里仅仅做一下实践复现。

具体实践环境为:

CentOS 7.2

docker-ce 23.0.0

详细安装升级过程就略过了。CentOS 7.2上默认安装的docker 是1.13版本,需要升级到v20.10以上版本。

第一步,用户准备。

准备一个普通用户u,后续就使用它来运行docker了。配置subuid、subgid、max_user_namespaces等信息,做好准备工作。

useradd rootless

sysctl user.max_user_namespaces=28633

第二步,从官方下载rootless脚本,并运行。

curl -fsSL https://get.docker.com/rootless | sh

运行成功后,会在用户目录下创建bin目录,包含了dockerd-rootless.sh等文件。

根据提示需要设置一些环境变量。可以把环境变量配置写入~/.bashrc,并执行source ~/.bashrc命令使之生效。

export XDG_RUNTIME_DIR=/home/u/.docker/run
export PATH=/home/u/bin:$PATH
export DOCKER_HOST=unix:///home/u/.docker/run/docker.sock

第三步,启动docker服务。

一般情况下,可以使用systemctl方式运行,在后台启动docker服务。

$ systemctl --user restart docker

但是 CentOS 7 不支持这种方式,可以直接运行dockerd-rootless.sh脚本来启动docker服务。

$ dockerd-rootless.sh

运行后,可以看到docker的服务都是以普通用户u的身份运行。

使用rootless模式后,从安全角度考虑,也就没必要再使用root以及其他用户操作docker了。

效果

在rootless模式下启动nginx容器后。

容器内,依然可以看到root身份的master进程和nginx身份的worker进程。此时容器内应用以为自己使用的是root用户身份。

实际上,宿主机上,因为user namespaces机制的缘故,这些进程也只是普通用户身份。

总结

Docker Rootless模式是官方提供的一种安全解决方案,可以让Docker守护进程以普通用户身份运行,从而避免容器应用利用Docker漏洞获得宿主机root权限的风险。

另外,要注意的是因为Docker作为容器本身需要利用很多系统高级特性,因此Docker守护进程以非Root身份运行实际上也会导致一些功能受限。这点可以参与官方文档详细了解。

至此Docker的用户安全机制,基本了解完毕。只要清楚地掌握容器的安全机制,做好日常安全管理和风险响应,可以为容器应用化提供较好的安全保障。

标签:rootless,Root,user,docker,root,Docker,运行
From: https://www.cnblogs.com/o-O-oO/p/18683423

相关文章

  • Ubuntu22.04上Docker的安装
    在Ubuntu22.04上安装Docker可以帮助您快速构建、测试和部署应用程序。Docker是一个开源的容器化平台,它使开发人员能够将应用程序及其依赖项打包到一个标准化的单元中。本文将详细介绍如何在Ubuntu22.04上安装和配置Docker。一、更新系统首先,确保您的系统软件包是最新的。这有......
  • [docker] 部署 nacos-server
    拉取nacosserver镜像dockerpullnacos/nacos-server:v2.4.3如果失败(网络问题),可以使用国内的镜像:dockerpullnacos-registry.cn-hangzhou.cr.aliyuncs.com/nacos/nacos-server:v2.4.3#其它版本nacos-registry.cn-hangzhou.cr.aliyuncs.com/nacos/nacos-server:v2.3......
  • docker在网桥模式下主机端口映射到容器端口的原理
    前置知识iptables:捕获并控制容器和主机之间的流量,可以通过iptables-tnat-nL命令查看iptables的(S/D)NAT规则docker0:虚拟交换机veth1b62ff4@if56:虚拟交换机的虚拟接口上下两个虚拟接口成对出现eth0@if57:容器的虚拟接口网络环境CentOS:ens33->192.168.40.180/24、docker......
  • docker-compose部署clickhouse
    创建目录mkdir-p/usr/local/docker/clickhouse/conf/usr/local/docker/clickhouse/data/usr/lcoal/docker/clickhouse/log启动临时容器获取配置文件dockerrun--rm-d--name=temp-clickhouse-serverclickhouse/clickhouse-server:latest复制配置文件到宿主机doc......
  • 硬件虚拟化(KVM)和操作系统虚拟化(Docker)
    硬件虚拟化分为I型虚拟化和II型虚拟化。I型虚拟化直接在硬件上虚拟出多个硬件,然后在虚拟出的硬件运行上操作系统;II型虚拟化作为软件在已有的操作系统上虚拟出多个硬件,然后在虚拟出的硬件上运行操作系统。操作系统虚拟化操作系统虚拟化是一种概念,目的是为了让应用和服务运行在......
  • jenkins + gogs + docker + nginx 完成自动化部署
    jenkins+gogs+docker+nginx完成自动化部署app安装部署1.docker-compose配置文件version:'3'services:nginx:image:nginx:latestports:-"80:80"volumes:-./nginx.conf:/etc/nginx/nginx.confdepends_on:-jen......
  • windows 将docker desktop上镜像打包并通过资源管理器找到使用
    在Windows上使用DockerDesktop时,可以通过以下步骤将Docker镜像保存为 .tar 文件,并通过资源管理器找到该文件: 步骤1:打开DockerDesktop确保DockerDesktop正在运行。如果未运行,请启动它。步骤2:打开PowerShell或命令提示符按 Win+S,搜索 PowerShell ......
  • Docker安装nacos(图文并茂,避免踩坑,一步到位)
    致谢本篇是对https://blog.csdn.net/ilvjiale/article/details/129417768这篇教程做了补充,感谢原帖!前言安装之前你需要准备一个mysql,当前安装方式是将数据持久化到数据库中的,这里的部署是单机模式dockerpullnacos/nacos-server:v2.3.1PS:这是拉取最新的nacos版本,如......
  • docker 安装nacos
    拉取镜像dockerpullnacos/nacos-server#macm1芯片需用arm64包dockerpullnacos/nacos-server:v2.1.2-slim其他包参考dockernacos镜像仓库构建nacos容器#-eMODE=standalone单机模式dockerrun--namenacos--privileged=true-eMODE=standalone-p8848:8848......
  • 如何停止所有正在运行的docker容器?
    在Docker中,要停止所有正在运行的容器,可以使用以下命令:dockerstop$(dockerps-aq)这个命令的作用是:dockerps-aq:这条命令会列出所有容器(包括运行中和已停止的)的ID,-a 参数表示列出所有容器(不只是运行中的),-q 参数则表示仅显示ID,不显示其他详细信息。$():这是Bash中的......