如果平常有在玩 Docker 的用户肯定知道透过 docker command
启动的容器预设是使用 root
用户来当作预设使用者及群组的。这样就会遇到一个问题,当主机环境你拥有 root 权限时就没有此问题。如果你没有 root 权限,又有需求在 Docker 容器內挂上 Volume,会发现产生出来的文件皆会是 root 权限,这时候在主机完全是无法写入的。本篇文章将教大家三种方式来设定容器使用者权限,以解决上述遇到的问题。
使用 docker 指令时指定使用者
以进入一个 Ubuntu 容器为例,通过以下指令:
1 | $ docker run -ti ubuntu /bin/bash |
这时候我们可以通过 -u
方式将使用者 uid
及群组 gid
传入容器内。
1 | $ mkdir tmp |
如何找到目前使用者 uid 及 gid 呢,可以通过下面的方式。
1 | $ id -u |
为了更加方便,上述指令可以改成:
1 | $ docker run -ti -v $PWD/tmp:/test \ |
使用 Dockerfile 指定使用者
除了在 Docker 命令行指定外,你也可以在 dockerfile
内直接指定使用者。
1 | # Dockerfile |
我个人不是很推荐这方式,除非是在 container
内独立建立使用者,并且指定权限。
通过 docker-compose 指定权限
通过 docker-compose
可以一次启动多个服务。用 user
可以指定使用者权限来写入特定的 volume。
1 | services: |
接着可以通过 .env 来指定变量的值。
1 | STORAGE_PATH=/home/deploy/xxxx |
总结
以上场景通常会发生在有挂载主机 Volume 进入容器内,但是你又没有 root 用户权限时。如果此时不指定使用者权限,这样生成出来的文件都会是 root 权限,一般用户无法写入,只能读取。
如果你觉得以上方法都过于麻烦,最后在提供一个终极解决方案,那就是使用 Podman
。具体使用方法可以参考 「再见 Docker,是时候拥抱下一代容器工具了」 一文。
来源:小恶魔
题图:来自谷歌图片搜索
版权:本文版权归原作者所有
投稿:欢迎投稿,邮箱: editor@hi-linux.com