当前位置: 首页 > news >正文

podman启动mongdb的container因为权限问题导致changing ownership和读取storage.bson失败的解决方法

FROM mongo:8.0.8 为基础镜像,加了些初始化数据做的mongodb镜像。用podman管理和backend,frontend组成一个简单的BS架构。利用podman创建pod,3个镜像同用一个空间,项目内部连接就可以统一用127.0.0.1加上端口进行通信了。

要使用podman,需要用podman生成镜像,和docker操作一样,在Dockerfile文件目录下面进行```

podman build --progress=plain -t <imgname>:<tag> .

创建好了后用

podman pod create --name <podnam> -p <port_host:port_container> -p <port_host:port_container> ...

创建pod,然后用之前生成的image创建并运行容器,其中,在mongodb的运行过程中

podman run  -id --rm --name <container_name> --pod <the pod name>  -v <host machine path>:/data/db  localhost/<mongo image name>:<mongo image> tag mongod --auth --bind_ip 0.0.0.0

出现了changing ownership of '/data/db..' : Operation not permitted,或者FileNotOpen, errmsg: Failed to read metadata from /data/db/storage.bson

以下是原因和方案:

  1. mongodb中Dockerfile会创建一个用户名mongodb(uid=999),创建一个用户组mongodb(gid=999)。于是挂载的宿主机目录下的db文件都归属于999
  2. 宿主机没有999这个用户。当前宿主机的用户是kiramario,uid=1000,gid=1000
  3. podman中宿主机和容器之间的命名空间有一个映射,比如kiramario用户运行podman run后,容器里面被映射为root(0)但是它不是真root,所以没有权限改归属于999的文件。
  4. 查看/etc/subuid,结果是kiramario:100000:65536,意思是映射规则是从100000开始,可以映射65536个。容器映射到主机是100000+999-1 = 100998
  5. podman unshare chown 999:999 <host machine path>,在宿主机上查看ls -l发现文件归属是100998,对上了,就有权限了。
http://www.dtcms.com/a/350926.html

相关文章:

  • HarmonyOS image组件深度解析:多场景应用与性能优化指南(2.4详细解析,完整见uniapp官网)
  • week5-[循环结构]听歌
  • MAE——Masked Autoencoders Are Scalable Vision Learners/图像分类和去雨雾重建/
  • 【ElasticSearch】json查询语法
  • 每日一题——力扣498 对角线遍历
  • Mo 人工智能在线教学实训平台
  • Python训练营打卡Day43-Tensorboard使用介绍
  • 美团一面“保持好奇”
  • JavaScript 中类(class)的super 关键字
  • AMH和cyberpanel等管理软件,哪个里面可以部署AI软件?
  • 【STM32】CubeMX(十二):FreeRTOS消息队列
  • vue3+typescript:为表格生成唯一的Key/No
  • 二分|组合|旋转数组
  • SET FOREIGN_KEY_CHECKS=0
  • CentOS 部署 Prometheus 并用 systemd 管理
  • 似然函数对数似然函数负对数似然函数
  • 项目1:异步邮件发送系统实战
  • 自由学习记录(88)
  • 设计一个完整可用的 Spring Boot Starter
  • 深入浅出 ArrayList:从基础用法到底层原理的全面解析(下)
  • 2025职场进阶:低门槛技能实用手册
  • 编写Linux下usb设备驱动方法:probe函数中要进行的工作
  • css新特性
  • openharmony之DRM开发:数字知识产权保护揭秘
  • 智能体框架CAMEL-第三章
  • 学习嵌入式的第二十五天——哈希表和内核链表
  • 基于SpringBoot的物资管理系统【2026最新】
  • Linux网络服务(六)——iptables Forward实现内网服务暴露与访问外网
  • 直播美颜SDK技术解析:人脸美型功能的算法原理与实现方案
  • linux环境下 - 如何干净地卸载掉nvidia驱动