docker rootless安装

news2025/7/17 1:34:27

rootless 简介

rootless模式允许以非root用户身份运行Docker守护程序和容器,以减轻守护程序和容器运行时中的潜在漏洞。只要满足先决条件,即使在Docker守护程序安装期间,无根模式也不需要root特权。无根模式是Docker Engine v19.03中引入的一项实验功能。无根模式从Docker Engine v20.10的实验中毕业。

在这里插入图片描述

无根模式在用户命名空间内执行Docker守护进程和容器。这与userns remap模式非常相似,只是在userns remmap模式下,守护进程本身以root权限运行,而在无根模式下,后台进程和容器都在没有root权限的情况下运行。

Rootless 模式利用 user namespaces 将容器中的 root 用户和 Docker 守护进程(dockerd)用户映射到宿主机的非特权用户范围内。Docker 此前已经提供了 --userns-remap 标志支持了相关能力,提升了容器的安全隔离性。Rootless 模式在此之上,让 Docker 守护进程也运行在重映射的用户名空间中。
在这里插入图片描述

参考:https://docs.docker.com/engine/security/rootless/

操作系统: Ubuntu 22.04 LTS

前置条件

创建普通用户

useradd -m -s /bin/bash testuser

为普通用户配置sudo权限

echo 'testuser ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/testuser
chmod 440 /etc/sudoers.d/testuser

切换到普通用户

su - testuser

您必须在主机上安装newuidmapnewgidmap。这些命令由大多数发行版的uidmap软件包提供。

sudo apt-get install -y uidmap

/etc/suubid/etc/subid中应至少包含用户的65536个从属UID/GID。在下面的示例中,用户testuser有65536个从属UID/GID(231072-296607)。

$ id -u
1001
$ whoami
testuser
$ grep ^$(whoami): /etc/subuid
testuser:231072:65536
$ grep ^$(whoami): /etc/subgid
testuser:231072:65536

特定于发行版的提示,如果未安装,请安装dbus-user-session软件包。默认情况下启用overlay2存储驱动程序。

sudo apt-get install -y dbus-user-session

安装docker

首先按照官方正常流程安装docker-ce

sudo apt-get update -y
sudo apt-get install -y ca-certificates curl gnupg lsb-release

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update -y
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

通过运行 hello-world 映像验证 Docker 引擎是否已正确安装。

sudo docker run hello-world

禁用docker服务

sudo systemctl disable --now docker.service docker.socket

配置环境变量

loginctl enable-linger $(whoami)
cat >>$HOME/.bashrc<<'EOF'
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
export PATH=/usr/bin:$PATH
EOF
source $HOME/.bashrc

安装rootless软件包

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

查看docker服务运行状态

testuser@ubuntu:~$ systemctl --user status docker
● docker.service - Docker Application Container Engine (Rootless)
     Loaded: loaded (/home/testuser/.config/systemd/user/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-12-22 12:00:33 CST; 10h ago
       Docs: https://docs.docker.com/go/rootless/
   Main PID: 9415 (rootlesskit)
      Tasks: 37
     Memory: 31.9M
        CPU: 18.155s
     CGroup: /user.slice/user-1001.slice/user@1001.service/app.slice/docker.service
             ├─9415 rootlesskit --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run --propagat>
             ├─9425 /proc/self/exe --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run --propa>
             ├─9442 slirp4netns --mtu 65520 -r 3 --disable-host-loopback --enable-sandbox --enable-seccomp 9425 tap0
             ├─9450 dockerd
             └─9467 containerd --config /run/user/1001/docker/containerd/containerd.toml --log-level info

Dec 22 12:00:34 ubuntu dockerd-rootless.sh[9450]: time="2022-12-22T12:00:34.357595184+08:00" level=warning msg="Unable to find cpu controller"
Dec 22 12:00:34 ubuntu dockerd-rootless.sh[9450]: time="2022-12-22T12:00:34.357656874+08:00" level=warning msg="Unable to find io controller"
Dec 22 12:00:34 ubuntu dockerd-rootless.sh[9450]: time="2022-12-22T12:00:34.357669424+08:00" level=warning msg="Unable to find cpuset controller"
Dec 22 12:00:34 ubuntu dockerd-rootless.sh[9450]: time="2022-12-22T12:00:34.358167646+08:00" level=info msg="Loading containers: start."
Dec 22 12:00:34 ubuntu dockerd-rootless.sh[9450]: time="2022-12-22T12:00:34.363349751+08:00" level=info msg="skipping firewalld management for rootless mode"
Dec 22 12:00:34 ubuntu dockerd-rootless.sh[9450]: time="2022-12-22T12:00:34.453762675+08:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip ca>
Dec 22 12:00:34 ubuntu dockerd-rootless.sh[9450]: time="2022-12-22T12:00:34.499494915+08:00" level=info msg="Loading containers: done."
Dec 22 12:00:34 ubuntu dockerd-rootless.sh[9450]: time="2022-12-22T12:00:34.516587473+08:00" level=info msg="Docker daemon" commit=3056208 graphdriver(s)=btrfs version=20.10.21
Dec 22 12:00:34 ubuntu dockerd-rootless.sh[9450]: time="2022-12-22T12:00:34.516853174+08:00" level=info msg="Daemon has completed initialization"
Dec 22 12:00:34 ubuntu dockerd-rootless.sh[9450]: time="2022-12-22T12:00:34.558781032+08:00" level=info msg="API listen on /run/user/1001/docker.sock"
testuser@ubuntu:~$ 

使用docker运行容器

docker run -d -p 8080:80 nginx

查看容器内的用户id为0

testuser@ubuntu:~$ docker exec -it funny_noyce id -u
0

查看进程用户id为165636

testuser@ubuntu:~$ ps -ef |grep nginx
testuser   69100   69077  0 22:31 ?        00:00:00 nginx: master process nginx -g daemon off;
165636     69148   69100  0 22:31 ?        00:00:00 nginx: worker process
165636     69149   69100  0 22:31 ?        00:00:00 nginx: worker process
testuser   69522   69369  0 22:52 pts/0    00:00:00 grep --color=auto nginx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【俄罗斯方块】单机游戏-微信小程序项目开发入门

这是一个仿俄罗斯方块小游戏的微信小程序&#xff0c;只需要写一小段代码就实现出来了&#xff0c;有兴趣的同学完全可以自己动手开发&#xff0c;来看看实现过程是怎样的呢&#xff0c;边写边做&#xff0c;一起来回忆小时候玩过的经典俄罗斯方块游戏吧。 文章目录创建小程序页…

certbot生成证书,配置nginx,利用脚本自动续期

踩了大量坑&#xff0c;做下记录。以下适用于博主本人&#xff0c;但是未必会适用于所有人 单域名与泛域名证书生成 sudo certbot certonly --standalone --email 邮箱 -d 域名# 单域名certbot certonly --preferred-challenges dns --manual -d *.baidu.com(修改这里) --ser…

【檀越剑指大厂—Springboot】Springboot高阶

一.整体介绍 1.什么是 Springboot? Springboot 是一个全新的框架&#xff0c;简化 Spring 的初始搭建和开发过程&#xff0c;使用了特定的方式来进行配置&#xff0c;让开发人员不再需要定义样板化的配置。此框架不需要配置 xml&#xff0c;依赖于 maven 这样的构建系统。 …

嵌入式分享合集125

一、多层板PCB设计中电源平面相对地平面要进行内缩&#xff1f; 有一些人绘制的PCB&#xff0c;在GND层和电源层会进行一定程度的内缩设计&#xff0c;那么大家有没有想过为什么要内缩呢。 需要搞清楚这个问题&#xff0c;我们需要来先了解一个知识点&#xff0c;那就是“20H”…

matlab 功率谱分析

谱分析介绍 谱分析是一种用于研究函数的数学方法。在数学中&#xff0c;谱分析的基本概念是将函数分解成不同的频率成分&#xff0c;以便更好地理解其行为。这些频率成分可以表示为正弦或余弦函数的级数和&#xff0c;称为谱线。 谱分析常用于信号处理、音频信息处理和图像处…

Windows系统增强优化工具

计算机系统优化的作用很多&#xff0c;它可以清理WINDOWS临时文件夹中的临时文件&#xff0c;释放硬盘空间&#xff1b;可以清理注册表里的垃圾文件&#xff0c;减少系统错误的产生&#xff1b;它还能加快开机速度&#xff0c;阻止一些程序开机自动执行&#xff1b;还可以加快上…

数据也能开口说话?这次汇报,老板疯狂给我点赞

年底了&#xff0c;大家的工作汇报进行得怎么样了&#xff1f; 是不是少不了各种数据&#xff1f;饼图、柱形图、条形图、折线图、散点图有没有充斥在你的 PPT 中&#xff1f; 我们出版社的数据统计一般截止到 12 月中下旬&#xff0c;所以前两天&#xff0c;我已经做完了年终…

白话说Java虚拟机原理系列【第三章】:类加载器详解

文章目录jvm.dllBootstrapLoader&#xff1a;装载系统类ExtClassLoader&#xff1a;装载扩展类AppClassLoader&#xff1a;装载自定义类双亲委派模型类加载器加载类的方式类加载器特性类加载器加载字节码到JVM的过程自定义/第三方类加载器类加载器加载字节码到哪&#xff1f;Cl…

浅谈冯诺依曼体系,操作系统和进程概念

文章目录浅谈冯诺依曼体系结构和操作系统冯诺依曼体系结构冯诺依曼体系结构图操作系统进程task_struct内容分类进程内核数据结构&#xff08;task_struct)进程对应的磁盘代码查看进程ps 列出系统中运行的进程ps ajx 查看系统中所有运行的进程ps ajx | grep 程序名 &#xff1a;…

【Linux操作系统】——在Ubuntu20.04上安装MySQL数据库

在Ubuntu上安装MySQL MySQL是一个开源数据库管理系统&#xff0c;通常作为流行的LAMP&#xff08;Linux&#xff0c;Apache&#xff0c;MySQL&#xff0c;PHP / Python / Perl&#xff09;堆栈的一部分安装。它使用关系数据库和SQL&#xff08;结构化查询语言&#xff09;来管…

类美团外卖、骑手、类快递取餐柜、整合菜品供应商、前厅、后厨、配送、智能厨电设备的智慧餐饮业务

一种商业模型之类美团外卖、骑手、类快递取餐柜、整合前厅、后厨、智能厨电设备智慧餐饮业务架构 涉及到&#xff1a; 0、基础数据管理 1、菜谱创错 2、菜谱编译 3、菜谱商业化 4、厨电管理 5、后厨管理 6、前厅管理 …

【Call for papers】SIGKDD-2023(CCF-A/数据挖掘/2023年2月2日截稿)

29TH ACM SIGKDD CONFERENCE ON KNOWLEDGE DISCOVERY AND DATA MINING. 文章目录1.会议信息2.时间节点3.论文主题1.会议信息 会议介绍&#xff1a; 29TH ACM SIGKDD CONFERENCE ON KNOWLEDGE DISCOVERY AND DATA MINING. 会议全称&#xff1a; ACM Knowledge Discovery and D…

为什么 APISIX Ingress 是比 Traefik 更好的选择?

本文可以为正在选型 Kubernetes Ingress Controller 产品的用户提供一些帮助。 作者张晋涛&#xff0c;API7.ai 云原生专家&#xff0c;Apache APISIX Committer、Kubernetes Ingress Nginx Reviewer Apache APISIX Ingress Apache APISIX Ingress 是一个使用 Apache APISIX 作…

FrameLayout布局案例

框架布局-FrameLayout 1.FrameLayout简介 1.简介&#xff1a;白话&#xff0c;墙角堆砌东西 就是开辟一个巨大的空间控件的位置不能够指定&#xff0c;默认就是左上角后面对挡住前面的2.属性 属性名称 对应方法 说明 android:foreground setForeground(Drawable) 设置绘制…

【408篇】C语言笔记-第十四章( 二叉树的建树和遍历考研真题实战)

文章目录第一节&#xff1a;冒泡排序1. 排序2. 冒泡排序第二节&#xff1a;冒泡排序实战1. 步骤2. 代码3. 时间复杂度与空间复杂度第三节&#xff1a;快速排序原理与实战1. 基本思想2. 快速排序实战3. 时间复杂度与空间复杂度第四节&#xff1a;插入排序原理及实战1. 插入排序原…

HSF 实现原理

HSF 实现原理 提供服务的流程 - server启动时候向ConfigServer注册 - client启动时候向ConfigServer请求list - client缓存list&#xff0c;发现不可用的server&#xff0c;从缓存中remove - ConfigServer通过心跳包维护可用server的list - list有更新的时候&#xff0c;…

单片机——LED

0. 单片机编程的一般步骤 目标分析&#xff1a;点亮开发板上的LED灯 电路原理图分析&#xff1a;相关器件的工作原理 数据手册分析&#xff1a;IO端口控制 代码编写、编译 下载与调试 1. LED简介 Led&#xff1a;即发光二极管&#xff0c;具有单向导通性&#xff0c;一般…

验证码、通知短信API常见使用问题

如今短信应用于我们生活工作的方方面面&#xff0c;注册或者登录一个应用可以用短信验证码快速登录&#xff0c;支付可以使用短信验证码&#xff1b;商家搞促销活动可以发送通知短信给客户&#xff0c;会员到期了商家可以发送告警短信给会员用户…可见验证码短信API和通知短信A…

JavaFX爱好者看过来,这款工具值得拥有

前言 各位CSDN的博友们&#xff0c;随着各地政策的放开&#xff0c;大伙现在是在水深火热当中呢&#xff1f;还是天选打工人-安然无羊。在这里&#xff0c;希望阳了的朋友&#xff0c;赶紧恢复健康&#xff0c;早日康复。希望没有阳的朋友们&#xff0c;继续坚持&#xff0c;万…

聊聊设计模式-解释器模式?

简介 解释器模式属于行为型模式。它是指给定一门语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;该解释器使用该表示来解释语言中的句子。是一种按照规定的语法进行解析的模式 编译器可以将源码编译解释为机器码&#xff0c;让CPU能进行识别并…