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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 在bitnami 安装的软件进入容器用户名都显示I have no name,这是什么原因呢?

背景

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

8f4e0e68db33445696d0bc9f6d303082.png

1feb1a8305d24953a01c0df75319c864.png

cefe525822c84ccebf53a58f75a87a8d.png

原因

在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_logger
  File "/app/log/log.py", line 11, in <module>
    os.makedirs(full_path)
  File "/usr/local/lib/python3.7/os.py", line 221, in makedirs
    mkdir(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 最佳实战

目录
相关文章
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
282 5
|
6月前
|
存储 Kubernetes Serverless
容器技术 20 年:颠覆、重构与重塑软件世界的力量
从 20 世纪硬件虚拟化的笨重,到操作系统虚拟化的轻量探索,容器技术历经蜕变。2013 年 Docker 横空出世,以 “一次构建,到处运行” 的创举打破环境壁垒,开启容器黄金时代。随后,Docker Compose、Kubernetes、Istio 等技术相继涌现,从多容器管理到集群编排,再到微服务治理,不断突破应用部署与运维的边界。如今,容器与 DevOps 深度融合,Serverless 架构异军突起,共同重塑软件开发生态。本文将带你穿越容器技术发展的关键节点,揭秘其如何以颠覆性力量推动云计算与数字化。
454 64
|
3月前
|
安全 持续交付 Docker
Docker:重塑现代软件交付的容器引擎
Docker:重塑现代软件交付的容器引擎
|
8月前
|
监控 关系型数据库 MySQL
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
546 30
|
8月前
|
Ubuntu 关系型数据库 MySQL
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
352 16
|
9月前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
1195 15
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
13232 39
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
11月前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。
|
JavaScript 前端开发 Docker
前端的全栈之路Meteor篇(一):开发环境的搭建 -全局安装或使用容器镜像
本文介绍了如何搭建 Meteor 开发环境,包括全局安装 Meteor 工具和使用 Docker 镜像两种方法,以及创建和运行一个简单的 Meteor 项目的基本步骤。 Meteor 是一个全栈 JavaScript 框架,适用于构建实时 Web 应用程序。文章还提供了遇到问题时的解决建议和调试技巧。
608 3
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
针对软件供应链的攻击事件在以每年三位数的速度激增,其中三方或开源软件已经成为攻击者关注的重要目标,其攻击方式和技术也在不断演进。通过供应链的传播,一个底层软件包的漏洞的影响范围可以波及世界。企业亟需更加标准和完善的供应链风险洞察和防护机制。本文将结合最佳实践的形式,面向容器应用完整的生命周期展示如何基于容器服务ACK/ACR/ASM助力企业构建云原生软件供应链安全。

热门文章

最新文章