学会这三招,Docker 容器权限管理乐无忧!


如果平常有在玩 Docker 的用户肯定知道透过 docker command 启动的容器预设是使用 root 用户来当作预设使用者及群组的。这样就会遇到一个问题,当主机环境你拥有 root 权限时就没有此问题。

如果你没有 root 权限,又有需求在 Docker 容器內挂上 Volume,会发现产生出来的文件皆会是 root 权限,这时候在主机完全是无法写入的。本篇文章将教大家三种方式来设定容器使用者权限,以解决上述遇到的问题。

使用 docker 指令时指定使用者

以进入一个 Ubuntu 容器为例,通过以下指令:

$ docker run -ti ubuntu /bin/bash

这时候我们可以通过 -u 方式将使用者 uid 及群组 gid 传入容器内。

$ mkdir tmp
$ docker run -ti -v $PWD/tmp:/test \
  -u uid:gid ubuntu /bin/bash

如何找到目前使用者 uid 及 gid 呢,可以通过下面的方式。

$ id -u
$ id -g

为了更加方便,上述指令可以改成:

$ docker run -ti -v $PWD/tmp:/test \
  -u $(id -u):$(id -g) ubuntu /bin/bash

使用 Dockerfile 指定使用者

除了在 Docker 命令行指定外,你也可以在 dockerfile 内直接指定使用者。

# Dockerfile
USER 1000:1000

我个人不是很推荐这方式,除非是在 container 内独立建立使用者,并且指定权限。

通过 docker-compose 指定权限

通过 docker-compose 可以一次启动多个服务。用 user 可以指定使用者权限来写入特定的 volume。

services:
  agent:
    image: xxxxxxxx
    restart: always
    networks:
      - proxy
    logging:
      options:
        max-size: "100k"
        max-file: "3"
    volumes:
      - ${STORAGE_PATH}:/data
    user: ${CURRENT_UID}

接着可以通过 .env 来指定变量的值。

STORAGE_PATH=/home/deploy/xxxx
CURRENT_UID=1001:1001

总结

以上场景通常会发生在有挂载主机 Volume 进入容器内,但是你又没有 root 用户权限时。如果此时不指定使用者权限,这样生成出来的文件都会是 root 权限,一般用户都无法写入,只能读取。

如果你觉得以上方法都过于麻烦,最后在提供一个终极解决方案,那就是使用 Podman。具体使用方法可以参考 「再见 Docker,是时候拥抱下一代容器工具了」 一文。

来源:小恶魔

原文:https://url.cn/5KhaLSm

题图:来自谷歌图片搜索

版权:本文版权归原作者所有

投稿:欢迎投稿,邮箱: editor@hi-linux.com

你可能还喜欢

点击下方图片即可阅读

使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值