VSCode Dev Container内工作目录属主为root而非latex用户原因求解
问题原因分析
挂载路径与工作目录不匹配
你手动执行docker run命令时,显式指定了将本地当前目录绑定挂载到容器内的/home/latex路径,该路径是镜像构建阶段就预先为latex用户创建的家目录,属主默认就是UID/GID为1000的latex用户,因此挂载后权限显示符合预期。
而VS Code Dev Containers的默认行为是将本地项目目录挂载到容器内的/workspaces/<项目名>路径,同时默认工作目录也设置为该路径。这个挂载目录是容器启动时动态生成的,没有在镜像构建阶段预先分配权限,默认属主为root。你配置的remoteUser: latex仅指定了登录容器的用户,没有修改默认挂载规则,因此进入后的默认工作目录属主为root。
UID/GID自动更新导致原有目录权限失效
Dev Containers默认开启了updateRemoteUserUID配置,该配置会自动将容器内指定的remoteUser的UID/GID修改为和宿主机当前用户的UID/GID一致,避免挂载目录的权限冲突。
你镜像中创建的latex用户默认UID/GID为1000,如果你的宿主机用户UID/GID不是1000,Dev Containers启动容器时会修改latex用户的UID/GID为宿主机的值,此时镜像中预先创建的/home/latex目录的属主仍然是原来的1000,容器内没有对应该UID的用户,就会显示为root。
解决方案
你可以通过修改devcontainer.json配置修正该问题:
{ "name": "merci-la-vie", "dockerFile": "Dockerfile", "remoteUser": "latex", // 指定挂载路径为latex用户的家目录 "workspaceMount": "source=${localWorkspaceFolder},target=/home/latex,type=bind", // 指定默认工作目录 "workspaceFolder": "/home/latex", // 不需要自动更新UID/GID时可以关闭,保持和镜像内配置一致 "updateRemoteUserUID": false }
内容的提问来源于stack exchange,提问作者nowox
相关产品推荐
相关产品推荐

