Docker容器修改宿主机挂载卷文件为只读,如何调整权限实现宿主机可读写?
解决方案
这个问题的核心原因是容器内执行命令的用户UID/GID与宿主机当前用户的UID/GID不匹配,容器创建的文件默认归属容器内用户,宿主机用户没有对应读写权限,可通过以下几种方式解决:
- 单次执行命令时指定用户UID/GID
首先在宿主机终端执行以下命令获取当前用户的UID和GID:
普通Linux用户默认输出一般为id -u && id -g1000和1000,执行startapp命令时添加--user参数指定对应UID/GID即可:
该方式创建的文件直接归属宿主机当前用户,默认拥有读写权限。docker exec -it --user 1000:1000 CONTAINER_ID python3 manage.py startapp myapp - 固定容器运行用户(适合长期开发场景)
直接修改docker-compose.yml配置,在Django对应的服务配置块下添加user字段,指定和宿主机匹配的UID/GID:
修改完成后重启容器生效:volumes: - /home/user/myproject:/myproject # 注意原配置缺少根路径/,建议补全避免挂载错误 user: "1000:1000" # 替换为你实际查询到的UID:GID
后续无论容器内自动执行操作还是手动exec执行命令,生成的文件权限都会自动匹配宿主机用户。docker-compose up -d --force-recreate - 修复已生成的只读文件权限
如果已经生成了只读的应用文件,可在宿主机直接执行以下命令批量修改目录权限:sudo chown -R $(id -u):$(id -g) /home/user/myproject
内容的提问来源于stack exchange,提问作者Nivedita
相关产品推荐
相关产品推荐

