Docker tmpfs挂载目录设置1777权限后容器重启权限失效问题
问题原因
- tmpfs 是基于内存的临时文件系统,仅在容器运行时存在,容器停止后 tmpfs 会被卸载,所有数据清空。
- 首次创建容器启动时,Docker 会按照你指定的
tmpfs-mode=1777参数挂载 tmpfs 到/app路径,此时 tmpfs 的权限直接覆盖了镜像中原有/app目录的权限,因此你看到的是drwxrwxrwt。 - 容器重启时,Docker 的处理逻辑会优先读取镜像中原有
/app目录的默认权限(Debian 镜像中目录默认权限为 755,即drwxr-xr-x),未重新应用tmpfs-mode参数的配置,导致挂载后的/app权限变为默认的755。
永久生效解决方案
有两种常用方案可以实现权限永久生效:
方案1:修改镜像中 /app 目录的默认权限
在构建自定义镜像时,提前创建 /app 目录并设置为1777权限,Dockerfile示例:
FROM debian:latest RUN mkdir -p /app && chmod 1777 /app
用该自定义镜像创建容器即可,重启后 /app 权限会保持1777。
方案2:在容器启动命令中强制修改权限
如果不想修改镜像,可以在创建容器时调整启动命令,每次容器启动时先修改 /app 权限再执行业务进程,创建命令示例:
docker create -it --name=test \ --read-only \ --mount type=tmpfs,destination=/app,tmpfs-mode=1777 \ --entrypoint /bin/bash \ debian:latest \ -c "chmod 1777 /app && exec /bin/bash"
如果你的容器有自定义业务进程,把末尾的 /bin/bash 替换为你实际的启动命令即可。
内容的提问来源于stack exchange,提问作者m.divya.mohan
相关产品推荐
相关产品推荐

