首页 > 其他分享 >以宿主机用户身份运行Docker容器

以宿主机用户身份运行Docker容器

时间:2023-03-09 09:13:24浏览次数:42  
标签:容器 UID 宿主机 用户 Docker dir

本文更新于2023-02-27,使用Docker 23.0.1,操作系统为Debian 11。

Docker与宿主机共享同一个系统内核,容器是以root用户身份运行的,如果挂载了磁盘卷,则容器往磁盘卷创建文件的时候,宿主机的文件所有者就是root用户。

下文阐述如何通过gosu指定宿主机的用户来运行容器。示例的作用是,通过容器,使用宿主机当前用户在宿主机当前目录下创建文件。

  1. 编写Docekrfile。

    FROM debian:11
    
    RUN apt-get update
    RUN apt-get install --no-install-recommends -y gosu
    
    ARG UID
    
    RUN useradd -u ${UID} user
    
    ENTRYPOINT gosu user touch /data/dir/file
    

    Dockerfile通过参数UID传入用来运行容器的宿主机用户ID。当然,也可以直接用具体值写死。user为容器中的用户名,这是无关紧要的,不和宿主机的用户名对应也可。

  2. 构建Docker镜像。

    docker image build . --build-arg UID=$(id -u) --tag test:v1
    

    将宿主机当前用户的用户ID传入UID参数。当然,如果Dockerfile中写死了UID的值,就无需传入参数。或者,也可使用其它用户ID传入。

  3. 创建Docker容器。

    docker container create -v $(pwd)/dir:/data/dir --name testv1 test:v1
    
  4. 保证磁盘卷映射的宿主机目录存在,且用户有权限。

    mkdir dir
    

    如果磁盘卷映射的宿主机目录不存在,则容器运行时会先自行创建,其所有者就是root用户。

    因本文构建Docker镜像是使用当前用户,创建目录也是使用当前用户,故用户对此目录总是有权限的。

  5. 运行容器。

    docker start testv1
    
  6. 查看宿主机当前目录下新创建的文件的所有者。

    ls -l dir/file
    

    如文件所有者是宿主机当前用户,则运行正确。

标签:容器,UID,宿主机,用户,Docker,dir
From: https://www.cnblogs.com/garvenc/p/run_docker_container_with_host_user.html

相关文章

  • Docker CLI docker buildx imagetools create 常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Doc......
  • 远程云服务器上docker安装redis的过程
    首先明确一点,云服务环境你已经安装好了docker 1.进入dockerhub官网查看你所需要的redis的版本信息https://registry.hub.docker.com/ ......
  • Linux安装Docker
    Linux安装Docker1.CentOS安装DockerDocker分为CE和EE两大版本。CE即社区版(免费,支持周期7个月)EE即企业版,强调安全,付费使用,支持周期24个月。DockerCE分为s......
  • 创建docker免费个人容器镜像托管(私服)服务-阿里云
    创建容器镜像服务进入主页:容器镜像服务选择个人实例:   点击创建个人版:    创建完成,点击设置Registry登录密码: 设置完密码; 创建命名空间(全网唯一)......
  • Centos7安装Docker环境
    Dockerdaemon(Docker守护进程):运行在宿主机上,Docker守护进程,用户通过Dockerclient(Docker命令)与Dockerdaemon交互。Images(镜像):将软件环境打包好的模板,用来创建容......
  • docker部署区块链浏览器 explorer
    下载explorer#gitclonehttps://github.com/ethereumclassic/explorerdocker-compose.ymlversion:'3'services:app:build:.command:./app.jsre......
  • 关于docker中-镜像IMAGE的管理-删除操作
    可以使用dockerimages列出镜像,看到可以在加上-a列出中间层镜像[root@qq-5201351~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEnginx......
  • 使用docker compose部署skyworking9.0
    catdocker-compose.yamlversion:'3.3'services:es8:image:elasticsearch:8.4.2container_name:es8ports:-9200:9200-9300:9300......
  • docker-compose部署mysql8的登录问题
    之前docker-compose部署mysql8的时候密码设置好,第一次启动容器,登录密码不对,需要登录容器跳过密码,重新修改密码启动,就研究了以下,就几个问题就弄好了docker-compose.yaml文......
  • STL:map映照容器的简单用法(poj 2503 Babelfish)
    STL中map映照容器由一个键值和一个映照数据组成,具有一一对应的关系。结构为:键值--映照数据       例: aaa --111             bbb--222   ......