总结之Docker(四)——镜像修改非ROOT用户权限后生成新镜像并发布

Docker拉去目标镜像

docker pull redis:6.2.5
如果出现拉去过程超时,或者连接失败。

添加镜像加速器,以阿里云为例,阿里云目前推广提供镜像加速器,需要登录。
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
生成的加速器地址,后面有教学如果使用加速器。

以windows为例

在Docker daemon加入(每个人地址不一样)

"registry-mirrors": ["https://jhtiz.mirror.aliyuncs.com"]

在这里插入图片描述

创建Dockerfile

先在本地创建Dockerfile文件
编辑Dockerfile文件

FROM  redis:6.2.5USER rootRUN groupadd -g 1001 bigdata && useradd -m -u 1001 -g bigdata  bigdataRUN  chown -R 1001:1001  /opt/* && chown -R 1001:1001 /tmp /mntUSER 1001

生成新镜像

docker build -t my-redis:0.0.1  d:/mydockerfiles

记得修改目录权限时,不能照抄,如下:
在这里插入图片描述
这里没有 /opt/* 文件或目录

这里要根据具体镜像内容和文件权限来

运行新镜像

查看镜像

docker images

运行新镜像id
-i: 交互式操作。
-t: 终端。

docker run -it 5a6ec30c0ef4

或者

docker run -d 5a6ec30c0ef4
出现无权限
应用生成日志没有权限 permission denied

或者

Unable to create directory required for Rundeck repository. Please ensure the file: /home/rund/repository exists and that Rundeck has write access to the directory. 

需要在Dockerfile中先调整目录权限、先创建目录

...
RUN groupadd -g 1001 bigdata && useradd -m -u 1001 -g bigdata bigdata && 
#创建目录
RUN mkdir -p /home/rund/repository
# 在切换用户之前调整日志目录权限
RUN mkdir -p /app/logs && chown -R bigdata:bigdata /app/logs...# 切换到非root用户
USER 1001

如果您希望更通用地解决权限问题,确保用户1001(或任何指定用户)对容器内所有需要访问的目录和文件都有适当的权限,可以采取以下策略:

使用通配符:
如果有多个目录或文件需要赋予权限,可以使用通配符来匹配一系列路径。例如,如果您需要对所有位于/home/rund/下的目录和文件进行权限设置,可以这样做:

Dockerfile

RUN chown -R 1001:1001 /home/rund/*

注意,这种方式不会递归地处理新创建的目录或文件。如果需要递归处理,您可能需要明确列出每个主要目录。

递归赋权:
对于需要递归处理的目录,确保使用-R标志。如果您知道容器启动过程中可能会动态创建某些目录或文件,可以预见到这些位置,并提前设置好权限。例如,如果除了/home/rundeck/外,还有其他几个目录需要赋权,可以逐一处理:

Dockerfile

RUN chown -R 1001:1001 /home/rund \&& chown -R 1001:1001 /var/log/myapp \&& chown -R 1001:1001 /etc/myapp/conf.d

创建和赋权结合:
如之前提到的,在创建目录的同时进行权限设置,确保新创建的目录直接归指定用户所有:

Dockerfile

RUN mkdir -p /path/to/new/dir && chown -R 1001:1001 /path/to/new/dir

使用setgid位:
对于某些需要用户组内成员共同协作的目录,可以设置setgid位,这样任何用户在该目录下创建的文件都会继承该目录的组所有权。这可以通过chmod g+s实现:

Dockerfile

RUN chmod -R g+s /home/rund/shared

使用临时的root命令执行脚本:
如果有复杂的权限设置逻辑,可以编写一个脚本,该脚本执行所有的权限设置逻辑,然后在Dockerfile中使用USER root执行这个脚本,最后再切换回非root用户。这样可以保持Dockerfile的清晰度和可维护性。

记住,虽然赋予非root用户足够的权限很重要,但也应当遵循最小权限原则,只给予执行任务所需的最小权限,以增强容器的安全性。

把新镜像推送到阿里云

先登录

docker login --username=153351 registry.cn-hangzhou.aliyuncs.com

推送

docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/imaniy/bigdata:[镜像版本号]docker push registry.cn-hangzhou.aliyuncs.com/imaniy/bigdata:[镜像版本号]

在这里插入图片描述

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

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

相关文章

HMI(人机交互)应用的15大领域,欢迎补充。

HMI(Human-Machine Interface,人机界面)可以应用于许多不同的场景和行业,包括但不限于以下几个方面: 工业控制系统:HMI在工业生产中广泛应用,用于监控和控制生产过程。例如,工厂中的…

【OS】相关知识点收集

1 页面置换 页面置换算法是在计算机内存管理中用于决定哪些页面应该被替换出内存,以便为新的页面腾出空间的策略。以下是关于页面置换算法的详细回答,参考了多篇相关文章的信息。 1. 页面置换算法概述 页面置换算法主要应用于在存储体系当中&#xff…

NewStarCTF_RE(week1,2)

[NewStarCTF 2023 公开赛道]easy_RE ida 可能会把 一个数组或字符串拆开,可以通过计算地址,知道是一起的 也有的会藏在汇编窗口 Segments IDA的Segments窗口 :shiftf7 https://www.cnblogs.com/sch01ar/p/9477697.html ida 各种窗口也是需要…

技术周总结2024.06.10~06.16(AI Agent,Maven, Idea)

文章目录 一、06.14 周五1.1)问题01:常见的 maven命令都有哪些,都怎么使用1. mvn clean2. mvn compile3. mvn test4. mvn package5. mvn install6. mvn deploy7. mvn clean install8. mvn dependency:tree9. mvn site10. mvn exec:java11. mv…

AMD平台,5600X+6650XT,虚拟机安装macOS 14(2024年6月)

AMD平台安装macOS 14的麻烦,要比Intel平台多的多,由于macOS从13开始,对CPU寄存器的读取进行了改变,导致AMD平台只要安装完macOS 13及以后版本,开机后就报五国语言错误,不断重启。改vmx文件,被证…

mongodb command

1. start and stop ./mongod --dbpath -dbpath /data/shard1/db --logpath -dbpath /data/shard1/db/logs/mongodb.log --fork mongod --shutdown --dbpath /data/shard1/db MongoDB基础篇-03-启动与关闭_mongodb启动和关闭-CSDN博客 2. 查看分片数据分布 mongo mongo01.c…

用React编写一个密码组件表单

theme: condensed-night-purple highlight: atelier-cave-light 背景介绍 我们在使用网站或者应用程序的登录界面或创建帐户界面时,往往避免不了需要用户输入密码这一步骤,而用户是否可以选择看见他们输入的密码是十分重要的一项功能。尤其是在当输入的…

Java面向对象-final关键字

Java面向对象-final关键字 一、final1、修饰变量2、修饰方法3、修饰类4、案例 一、final 可以修饰变量、方法、类 1、修饰变量 final修饰一个变量,变量的值不可以改变,这个变量就变成一个字符常量,约定俗称的规定:名字大写。 f…

大数据开发语言Scala入门 ,如何入门?

Ai文章推荐 1 作为程序员,开发用过最好用的AI工具有哪些? 2 Github Copilot正版的激活成功,终于可以chat了 3 idea,pycharm等的ai assistant已成功激活 4 新手如何拿捏 Github Copilot AI助手,帮助你提高写代码效率 5 Jetbrains的…

kotlin 中的字符

一、字符类型 1、kotlin中,字符用Char类型表示,值使用单引号 括起来。 fun main() {val a: Char 1println(a) // 1println("a类型为:${a.javaClass.simpleName}") // a类型为:char } 2、特殊字符的表示。 \t——制…

改进YOLO系列 | CVPR 2021 | Involution:超越convolution和self-attention的神经网络算子

Involution:超越卷积和自注意力的新型神经网络算子(中文综述) 简介 Involuton是CVPR 2021上提出的新型神经网络算子,旨在超越卷积和自注意力,提供更高效、更具表达力的特征提取能力。 Involution原理 Involution的…

【flink实战】flink-connector-mysql-cdc导致mysql连接器报类型转换错误

文章目录 一. 报错现象二. 方案二:重新编译打包flink-connector-cdc1. 排查脚本2. 重新编译打包flink-sql-connector-mysql-cdc-2.4.0.jar3. 测试flink环境 三. 方案一:改造flink连接器 一. 报错现象 flink sql任务是:mysql到hdfs的离线任务&…

IPTCP知识

1. IP: IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”IP地址分类:A类地址、B类地址、C类地址、D类地址、E类地址 A类地址分配给规模特别大的网络使用,B类地址分配给一般的中型网络,C类地址分配给小型网…

短URL服务设计

引言 在营销系统里,为了增加系统的活跃用户数,经常会有各种各样的营销活动。这类活动几乎都是为了充分利用存量用户的价值,促使他们分享产品或App以达到触达到更多用户的目的。又或者是出于营销目的,群发优惠券触达短信这种场景。…

Kotlin 数据类(Data Class)

Kotlin 数据类(Data Class)是一种特别用于持有数据的类。它们简化了数据类的创建,并提供了一些自动生成的方法。下面详细介绍 Kotlin 数据类的原理和使用方法。 数据类的定义 Kotlin 中的数据类使用 data 关键字定义。例如: da…

MVC 框架安全

在现代 Web 开发中,使用 MVC 架构是一种流行的做法。MVC 是 Model-View-Controller 的缩写,它将 Web 应用分为三层,View 层负责用户视图、页面展示等工作;Controller 负责应 用的逻辑实现,接收 View 层传入的用户请求&…

016基于SSM+Jsp的医院远程诊断系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

HDU - 5651 xiaoxin juju needs help(Java JS Python C C++)

题目来源 Problem - 5651 (hdu.edu.cn) 题目描述 众所周知,小新是一位才华横溢的程序员。当他还是小学六年级的学生时,他就知道回文字符串了。 今年夏天,他在腾讯实习。一天,他的领导来找小新帮忙。他的领导给了他一个字符串&a…

MySQL之优化服务器设置(五)

优化服务器设置 高级InnoDB设置 innodb_old_blocks_time InnoDB有两段缓冲池LRU(最近最少使用)链表,设计目的是防止换出长期很多次的页面。像mysqldump产生的这种一次性的(大)查询,通常会读取页面到缓冲池的LRU列表,从中读取需要的行&…

npm i 报错 gifsicle pre-build test failed

1.ping raw.githubusercontent.com PS C:\Users\Administrator> ping raw.githubusercontent.com Ping 請求找不到主機 raw.githubusercontent.com。請檢查該名稱,然後重試。2.修改hosts檔案,增加以下設定 52.74.223.119 github.com 192.30.253.119 …