Docker本地文件夹映射至容器后文件不显示问题求助
问题分析与解决方法
核心问题
你遇到的挂载目录文件不显示,大概率是容器内od用户的UID/GID与本地user用户不匹配导致的——Linux文件系统靠UID/GID识别权限,而非用户名,即使本地目录权限是drwxrwxr-x,如果容器用户的UID和本地目录所有者UID不一致,就会出现无法访问/看不到文件的情况。
解决步骤
1. 核对UID/GID匹配情况
本地终端执行,查看
user用户的UID和GID:id user输出类似:
uid=1000(user) gid=1000(user) groups=1000(user),...进入容器后执行,查看
od用户的UID和GID:id od如果两者的UID/GID数值不一样,就是权限不匹配的根源。
2. 永久解决:调整镜像中od用户的UID/GID
修改你的Dockerfile,添加以下命令(把1000换成你本地user的实际UID/GID):
# 调整sudo组的GID匹配本地用户组GID RUN groupmod -g 1000 sudo # 调整od用户的UID和GID,同时归属到sudo组 RUN usermod -u 1000 -g 1000 od
重新构建镜像后,再运行容器就能正常访问挂载目录的文件。
3. 临时解决:运行容器时指定本地用户的UID/GID
如果不想重新构建镜像,运行容器时加上--user参数,直接指定本地user的UID和GID:
docker run --name tf-flask -it -u 1000:1000 -v ${pwd}/flask:/tf-train/flask-temp ainosoft/tf-od-2.13-opencv-4.81 bash
这样容器内会以和本地user相同UID/GID的身份运行,就能正常读取挂载目录的文件。
4. 验证挂载目录权限
进入容器后执行以下命令,确认挂载目录的所有者是否为od用户:
ls -ld /tf-train/flask-temp
如果所有者显示为od,说明权限匹配成功,此时应该能看到本地的文件了。
内容的提问来源于stack exchange,提问作者Gautam
相关产品推荐
相关产品推荐

