You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Docker会更改宿主机挂载目录下RocksDB文件的权限归属?

问题描述

我们通过docker-java-api动态创建容器,部分容器重度使用RocksDB数据库,其文件存储在宿主机上,宿主机上初始文件权限如下:

ls -lrt /mnt/data/rocksdb
-rw-r--r-- 1 root root    8374 Nov 28 15:32 fileA
-rw-r--r-- 1 root root       0 Nov 28 15:32 fileB
-rw-r--r-- 1 root root      37 Nov 28 15:32 ....
-rw-r--r-- 1 root root      16 Nov 28 15:32 fileC
-rw-r--r-- 1 root root   19646 Nov 28 15:32 ..
-rw-r--r-- 1 root root   22500 Nov 28 15:32 .... etc

我们将/mnt/data/rocksdb挂载至运行数据库应用的容器中,启动容器后,宿主机上该目录下的文件权限归属变为:

ls -lrnt /mnt/data/rocksdbdata/
total 84092
-rw-r--r-- 1 999 999    8374 Nov 28 15:32 fileA
-rw-r--r-- 1 999 999       0 Nov 28 15:32 LOCK
-rw-r--r-- 1 999 999      37 Nov 28 15:32 fileB
-rw-r--r-- 1 999 999      16 Nov 28 15:32 fileC
-rw-r--r-- 1 999 999   19646 Nov 28 15:32 ...
-rw-r--r-- 1 999 999   22500 Nov 28 15:32 .....etc

其中UID:GID(999:999)对应的用户为docker,请问此现象的原因是什么?

原因分析
  • 容器内运行RocksDB的进程是以UID为999的用户执行的,这个用户是镜像预设的非root用户,对应宿主机上的docker用户
  • Docker挂载宿主机目录时,文件系统权限是基于UID/GID而非用户名识别的:容器内进程用999用户读写挂载目录的文件时,宿主机会把这些文件的所有者映射为宿主机上UID=999、GID=999的用户
  • 初始文件由宿主机root用户创建,但容器内进程修改或写入文件时,会以自身运行的UID/GID更新文件权限属性,导致宿主机上看到的所有者变为999:999

内容的提问来源于stack exchange,提问作者gai-jin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:15:32