如果平常有在玩 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: xxxxxxxxrestart: alwaysnetworks:- proxylogging:options:max-size: "100k"max-file: "3"volumes:- ${STORAGE_PATH}:/datauser: ${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 高可用集群

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

  1. nb信号和4g信号_手机信号很强但是4G网络却很卡?学会这三招,立马恢复网速

    相信不少小伙伴在使用手机的时候,可能会遇到这样一种情况,那就是手机信号明明很强,但是4G网络却很卡,无论是看视频还是玩游戏都时不时出现卡顿的情况,非常影响体验.那么这种情况我们应该怎么解决呢,其实只要 ...

  2. sql提取字符串中的一部分数据_学会这三招提取字符串中的数字不用愁

    在Excel表格中提取字符串中的数字是我们经常会遇到的问题的,那么平时朋友们都用什么方法呢?今天分享三种方法,学会这三招,提取字符串中的数字不用愁. 一.使用Ctrl+E快速智能填充快捷键: 说明: ...

  3. 软件系统三基座之一:权限管理

    软件系统三基座包含:权限管理.组织架构.用户管理. 何为基座,即是有了这些基础,任一相关的"建筑"就能逐步搭建起来. 万丈高楼平地起 一.为什么要权限管理 权限管理,一般指根据系统 ...

  4. 手把手带你学Docker:Docker容器日常管理(四)

    运行Docker容器的命令:docker run == docker create + docker start 查看容器 docker ps:查看正在运行的容器 docker ps -a:查看已经创 ...

  5. docker容器日常管理(四)

    运行Docker容器的命令:docker run == docker create + docker start 查看容器: docker ps:查看正在运行的容器 docker ps -a:查看已经 ...

  6. 看一眼就能学会---使用link让docker容器互相通信

    使用link连接docker容器 首先需要做的是已安装好所需要的docker容器,小编这里以tomcat.mysql.rabbitmq为例,其他的都是可以直接套用的 这里就默认已经将mysql.rab ...

  7. 我赢助手小技巧:学会这三招,爆款内容视频完播率提高50%(中)

    上一篇我们说了爆款内容的四大共性和底层逻辑,今天我们来看一看如何去设置标题.封面和剧情,实现视频的完播率. 第二个技巧是标题,标题里面我们强调的套路. 你同样的要把关键词突出,你在封面上有文案的标题, ...

  8. docker可视化管理界面_分析一款Docker容器可视化管理工具Porttainer

    Porttainer介绍 Portainer是一款可视化.轻量级的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker主机及Swarm群集,提供状态显示面板.应用模板快速 ...

  9. (三)搭建容器云管理平台笔记—安装前准备工作

    2019独角兽企业重金招聘Python工程师标准>>> 一.参考文档 1. 官网:https://kubernetes.io/ 2. 官网文档: https://kubernetes ...

最新文章

  1. 4. Leetcode 18. 四数之和 (数组-双向双指针)
  2. OO Unit 3 JML
  3. Azure Sentinel -- 云原生企业安全信息和事件管理平台(SIEM)初探系列一
  4. 不到4个小时,我找到了一枚苹果 0day
  5. SLF4J错误:NoSuchMethodError解决方案
  6. TF2.0—tf.keras.layers.GaussianNoise
  7. MEF的asp.net Hello World程序
  8. 武汉大学计算机学院c语言试题,武汉大学计算机学院C语言历年试题(48页)-原创力文档...
  9. vue引用阿里云iconfont使用icon图标(elementUI图标太少)
  10. python 中英文 分离_Python 将字符串的中英文分离的完整代码
  11. 在JAVA中如何求Decimal的相反数,如何求Decimal的负数
  12. Java爬虫之批量下载LibreStock图片(可输入关键词查询下载)
  13. 为什么 MongoDB 索引选择B-树,而 Mysql 选择B+树(精干总结)
  14. 客户标签不能只是个“标签”
  15. 在线直播源码,VUE 获奖名单滚动显示的两种方式
  16. axure7.0下载安装教程
  17. oracle 视图编辑保存,oracle 视图
  18. 爬虫逆向基础,认识 SM1-SM9、ZUC 国密算法
  19. pydicom 安装
  20. HDU 4546 比赛难度

热门文章

  1. 面向开发者的 Android 10 —— Android 10 亮点
  2. ThinkPad联想E431笔记本电脑Win8改BIOS设置启动装Win7
  3. multisim仿真 电流控制的电压源电路连接方法
  4. 地图可视化:零编程,BDP轻松制作动态轨迹地图!
  5. 华泰人工智能系列之一人工智能选股框架及经典算法简介
  6. 基于c#的区块链编程_C#编程之C#区块链零基础入门,学习路线图
  7. 生产报工软件怎么选?一定要看这几点,值得收藏!
  8. gulp详细入门教程
  9. 基于 BERT 实现的情感分析(文本分类)----概念与应用
  10. 淘宝服饰精品案例分析