为什么Docker中挂载为tmpfs的/run目录tmpfs-mode=1777不生效
问题原因说明
你配置的tmpfs-mode=1777在Docker挂载阶段实际是生效的,出现这个差异是Debian容器内部的初始化逻辑导致的,具体原因如下:
- Docker的tmpfs挂载逻辑正常:容器创建阶段挂载文件系统时,/run对应的tmpfs会按照你指定的参数正确设置为1777权限,这一步配置没有问题。
- /run权限被容器内部逻辑重置:Debian及绝大多数Linux发行版都遵循FHS(文件系统层次结构标准)规范,/run作为存储系统级运行时数据的目录,默认仅允许root用户写入。因此发行版内置的初始化脚本会在容器启动流程中,主动将/run的权限重设为0755,覆盖了挂载时设置的权限。
- /tmp权限未被修改的原因:FHS规范中/tmp的默认权限就是1777(所有用户可读写+粘滞位),发行版的初始化逻辑不会修改该目录的权限,因此挂载时的配置得以保留。
验证方法
你可以通过以下命令直接验证挂载阶段的权限配置是生效的:
docker run --rm -it --mount type=tmpfs,destination=/run,tmpfs-mode=1777 --entrypoint /bin/ls debian -ld /run
该命令将容器入口直接设置为ls命令,不会执行后续的初始化脚本,输出的/run权限会显示为drwxrwxrwt,和你的预期一致。
解决方案
如果确实需要让/run保持1777权限,可以在启动命令中主动修改权限再执行业务逻辑,示例如下:
docker run -d -it --name debian \ --mount type=tmpfs,destination=/run,tmpfs-mode=1777 \ --mount type=tmpfs,destination=/tmp,tmpfs-mode=1777 \ debian bash -c "chmod 1777 /run && bash"
内容的提问来源于stack exchange,提问作者Dinesh Reddy
相关产品推荐
相关产品推荐

