文章目录

  • 背景
  • 原因
    • user 参数的缺陷一
    • ### user 参数的缺陷二
  • Docker 官方的解决方案

背景

在bitnami 安装的软件进入容器用户名都显示I have no name,这是什么原因呢?



原因

在k8中容器默认好像是以uid=1001启动的,可以修改该uid
docker 启动的时候使用 --user 参数来指定容器内部的用户和组的 id,譬如:

$ docker run --rm \--user=$UID:$(id -g $USER) \-v "$PWD":/project \debian \bash -c "touch /project/tmp.txt"
$ ls -l tmp.txt
-rw-r--r-- 1 current_user current_user 0 Sep 28 02:09 tmp.txt

可以看到输出,current_user 处会显示主机当前用户的名字,这解决了主机用户对挂载的卷没有权限的问题。
如果不指定,例如

 docker run --rm \-v "$PWD":/project \debian \bash -c "touch /project/tmp.txt"
$ ls -l tmp.txt
-rw-r--r-- 1 root root 0 Sep 28 01:55 tmp.txt

主机当前目录出现了容器内创建的 tmp.txt,但是其权限、用户和组均是 root,其他用户不可写。

user 参数的缺陷一

使用 user 参数有一些缺陷,如果你进入容器内部的 terminal,会显示如下内容:

$ docker run --rm \-it \--user=$UID:$(id -g $USER) \-v "$PWD":/project \debian \bash -c "touch /project/tmp.txt && bash"
I have no name!@6cc07662a201:/$

bash 的用户名会显示 I have no name!,这是因为我们通过 --user 参数指定了容器内部的用户 id,但该 id 不存在于容器内的 /etc/passwd 文件中。 这个uid好像默认是1001

### user 参数的缺陷二

除了用户名显示问题还存在一个问题,在绑定挂载中如果没有挂载的目录容器没有权限写入内容。
例如我之前开发的reids迁移程序日志需要保留

#] docker run  --name redis-img-startline.txt-2 --user $(id -u) -v /opt/redis-mig/redis_key_mig:/app 10.50.10.185/harbortest/redis-mig:1.1 python3 redisMigrate.py 10.50.10.45 19000 10.50.10.170 7100 startline.txt.000
Traceback (most recent call last):File "redisMigrate.py", line 15, in <module>from log.log import get_loggerFile "/app/log/log.py", line 11, in <module>os.makedirs(full_path)File "/usr/local/lib/python3.7/os.py", line 221, in makedirsmkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/app/logs/20230201'

使用 Docker 挂载 models 目录,然而在 Docker 容器内部除了 models 文件夹都没有访问权限。

$ docker run --rm \--user=$UID:$(id -g $USER) \-v "$PWD/models":/project/models \debian \bash -c "touch /project/tmp.txt"
touch: cannot touch '/project/tmp.txt': Permission denied

这可以通过增加挂载路径:

$ docker run --rm \--user=$UID:$(id -g $USER) \-v "$PWD":/project \-v "$PWD/models":/project/models \debian \bash -c "touch /project/tmp.txt"
$

这样容器运行过程往 /project 写的临时文件都会出现在主机上。

Docker 官方的解决方案

docker 解决方案
dockerfile 最佳实战

为什么bitnami 安装的软件进入容器,用户名都是I have no name相关推荐

  1. root用户安装的软件在普通用户不生效

    root安装完成后,有时候需要进入普通用户,修改以下文件才能生效: 1.在这个文件中添加环境变量 vim ~/.bash_profile2.生效 source ~/.bash_profile 转载于: ...

  2. 深度linux安装安卓软件,Ubuntu 用户安装深度软件中心教程

    Linux Deepin 11.12 搭载最新版深度软件中心 2.0.目前已支持简体中文.繁体中文.英文三个语言版本.深度软件中心2.0 明显功能有:一键安装.升级软件,支持皮肤更换.并行下载,智能清 ...

  3. Windows10安装打开软件提示“为了对电脑进行保护,已经阻止此应用”解决方法!

    下载好了却安装不上? 在Windows10系统中打开或者安装部分软件的时候用户账户控制提示了"为了对电脑进行保护,已经阻止此应用". 解决方法 1.按下Win+R"&qu ...

  4. 容器虚拟化技术Docker(一)简介、安装、常见命令、数据卷、安装常规软件

    容器虚拟化技术Docker(一)简介.安装.常见命令.数据卷.安装常规软件 1.Docker简介 1.简介 Docker的主要目标是"Build,Ship and Run Any App,A ...

  5. 计算机怎么允许用户安装文件,如何禁止安装某个软件?电脑不允许安装软件的方法...

    如何禁止安装某个软件?想要禁止安装软件,可以在组策略中直接启用软件安装规则,但如果只是想要禁用某个软件的安装,则需要用户将该软件的证书进行一个限制,证书不通过,自然无法安装,下面是操作步骤. 注:下文 ...

  6. 计算机普通用户没有软件怎么回事,请教各位高手:单机多用户账户计算机,当管理员用户安装了程序,其它普通用户账户不能使用怎么处理?比如在管理...

    该用户可修改大部分计算机设制,安装不修改操作系统文件且不需要安装系统服务的应用程序,创建和管理本地用户帐户和组,启动或停止默认情况下不启动的服务,但不可访问NTFS分区上属于其他用户的私有文件. 2: ...

  7. 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.2 安装数据库软件)...

    当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 2.2 安装数据库软件 这部分简短讲 ...

  8. Jenkins——持续集成及Jenkins介绍和安装配置(插件,用户权限,凭据,Maven安装打包,配置tomcat用户权限)

    持续集成及Jenkins介绍和安装配置 持续集成及Jenkins介绍 软件开发生命周期 持续集成 持续集成的组成要素 持续集成的好处 Jenkins介绍 Jenkins安装和持续集成环境配置 Gitl ...

  9. linux软件安装 home,Ubuntu中安装建筑设计软件Sweet Home 3D

    原标题:Ubuntu中安装建筑设计软件Sweet Home 3D 本教程介绍如何在Ubuntu 16.04,Ubuntu 18.04,Ubuntu 19.04及更高版本中轻松安装最新的Sweet Ho ...

最新文章

  1. 六种 主流ETL 工具的比较(DataPipeline,Kettle,Talend,Informatica,Datax ,Oracle Goldengate)...
  2. 逆向链表c语言 abcdef,6-6 求单链表元素序号 (5 分)
  3. 留存率提高20%+,如何通过产品迭代做用户增长?
  4. Python为什么是编程语言中最skr的?
  5. jpa获取session_JPA 2 | 获取联接以及我们是否应该使用它们
  6. Javascript 构造函数模式、原型模式
  7. Django - 内置admin
  8. Python 文件读写操作-Python零基础入门教程
  9. c 语言多参数函数,C/C++实现多参数函数编程
  10. 编写bat脚本指定jdk路径运行jar包
  11. php 7.0 特性,PHP 7.3比PHP 7.0快22% 即将进入特性冻结阶段
  12. 解决8080端口被占用问题
  13. 怎么解决VMware“该虚拟机似乎正在使用中”问题
  14. 在JavaScript中返回多个值?
  15. unity物体挂leap交互脚本后在另一个相机视野中看不见问题的解决
  16. dicom文件的后缀_DCM文件扩展名 - 什么是.dcm以及如何打开? - ReviverSoft
  17. 阿里飞猪个性化推荐:召回篇
  18. 二.微信小程序代码的构成
  19. 历时三年“鸽王”Filecoin主网上线,分布式存储市场将迎来最强劲敌?
  20. 关于逆序的一些基本操作

热门文章

  1. 在Matlab图片里输入数学公式 符号和希腊字母等
  2. 日本的大米发补贴了,我们的黄豆呢?
  3. 职场思维:你的屁股决定你的未来?一张图,点醒了大部分人!建议收藏
  4. Swift5.1 语言指南(二十) 类型转换
  5. nyoj304节能(区间dp)
  6. NYOJ 304 节能(DP)
  7. BOM中window简介
  8. 2021 电子科技大学 组合数学试卷 (卢光辉、戴波 )
  9. YY李学凌的野心,要用区块链技术改变传统信息的传输路径
  10. 家装有必要用阻燃电线吗?