如何合理管理容器文件夹权限
Docker 默认是以root方式运行,并且镜像内部的默认用户也为root,所以在容器创建文件后,权限为root,退出容器发现文件夹等权限为root,本地宿主机不能够正常访问,下面是一些解决方法(推荐第一和第四种)。
前期准备,在主机上获得当前用户的uid和gid,使用以下命令:id -u
id -g
退出容器前将文件夹权限更改为宿主机用户的权限:
chown -R uid:gid /path/to
uid 和 gid即你获取的值,/path/to
需要修改的路径以当前的用户开启容器
例如ubuntu:docker run -it -v path:path --user "$(id -u):$(id -g)" ubuntu /bin/bash
这样容器里的用户的uid和gid和宿主机保持一致,就没有问题了构建镜像
虽然2可以解决权限问题,但是容器里默认是没有该用户的,并且也不能正常进入root用户,所以可以在构建image之前加入用户:1
2
3
4
5
6FROM ubuntu
ARG USER_ID
ARG GROUP_ID
RUN addgroup --gid $GROUP_ID user
RUN adduser --disabled-password --gecos ' ' --uid $USER_ID --gid $GROUP_ID user
USER user这样image就有了当前用户的信息,然后以root进入镜像,切换为你的默认用户,这样root和你本身id都可以正常使用了。
进入容器并增加用户
如果每个人都创建image会造成资源浪费,所以可以将3的步骤在进入容器的第一时间来完成就行了,例如你还是以之前的方式开启了ubuntu镜像,进入之后是root用户,也正确挂载了路径。
此时执行下面的命令增加用户组1
addgroup --gid gid user
gid
为你刚刚获取的gid
,user
为你宿主机组名(也可以随便取,只要gid
正确),然后执行下面的命令增加用户1
adduser --disabled-password --gecos ' ' --uid uid --gid gid user`
gid
为你刚刚获取的gid
,uid
为你刚刚获取的uid
。user
为你宿主机用户名(也可以随便取,只要uid
正确)–gecos :Set the gecos field for the new entry generated. adduser will not ask for finger information if this option is given.
–disabled-password:Like –disabled-login, but logins are still possible (for example using SSH RSA keys) but not using password authentication.
Author: DongSheng
Link: http://ehds.github.io/2021/01/21/docker_directory_premission/
License: 知识共享署名-非商业性使用 4.0 国际许可协议