首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从非root用户运行docker container?

从非root用户运行Docker容器有两种常见的方法:

  1. 使用用户命名空间(User Namespace):用户命名空间是Linux内核提供的一种机制,可以将容器内的用户与宿主机上的用户进行隔离。通过使用用户命名空间,非root用户可以在容器内以root用户的身份运行,而在宿主机上仍然以非root用户身份运行。要使用用户命名空间,需要确保宿主机的内核版本支持,并且Docker守护进程已经启用了用户命名空间功能。
  2. 使用特权模式(Privileged Mode):特权模式允许容器内的进程拥有与宿主机相同的权限,包括root权限。通过在运行容器时添加--privileged参数,可以使容器在特权模式下运行。但是,使用特权模式可能会降低容器的安全性,因此应该谨慎使用。

无论使用哪种方法,都需要确保在构建镜像时,将容器内的用户设置为非root用户,并且在容器启动时以非root用户身份运行应用程序。

以下是一个示例Dockerfile,演示如何在容器内以非root用户身份运行应用程序:

代码语言:txt
复制
FROM ubuntu:latest

# 创建一个新的用户
RUN useradd -ms /bin/bash myuser

# 切换到新用户
USER myuser

# 将应用程序复制到容器中
COPY myapp /app

# 设置工作目录
WORKDIR /app

# 运行应用程序
CMD ["./myapp"]

在构建镜像时,可以使用以下命令:

代码语言:txt
复制
docker build -t myapp-image .

然后,可以使用以下命令以非root用户身份运行容器:

代码语言:txt
复制
docker run -d --name myapp-container myapp-image

请注意,上述示例仅适用于演示目的,实际应用中可能需要根据具体情况进行调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Ubuntu添加root用户Docker用户

    前言   首先平常公司的Linux生产环境为了防止误操作导致灾难性问题,一般都不会给我们开发开放root管理员的账号权限。...所以平常在Ubuntu的普通用户登录的时候,要操作Dcoker一般都需要带上sudo来提升命令执行权限。为了解决这一问题,我们只需要将Docker假如到sudo用户组,即可默认sudo权限运行。...docker.sock: connect: permission denied lighthouse@VM-16-10-ubuntu:~$ 验证是否有Docker用户组 正常情况下,安装完Docker...以后会自动创建一个用户组,执行以下命令验证即可: grep docker /etc/group 添加Docker用户组 sudo groupadd docker 将当前登录用户添加到Docker用户组...sudo gpasswd -a $USER docker 更新Docker用户组 newgrp dockery  验证执行Dcoker命令不加sudo是否能正常运行

    1.6K40

    Linux CentOS 7 root用户安装源码版Docker

    Linux 版本:CentOS 7 注意:root用户必须要有sudo权限 一、安装前的准备 1.查看当前主机是否有docker组 若没有输出结果则新建 再次查看,发现已经有了docker组 2....新增拥有sudo权限的用户(若知道root和其他拥有sudo权限的系统用户密码,跳到3;若都没有,必做) 修改该用户的密码 为新增的用户添加sudo权限 sudo vi /etc/sudoers.../usr/bin/目录下docker有关指令的所属用户和所属组(必做,不然root用户使用docker指令报错:权限不够) sudo chown root:docker /usr/bin/docker.../systemd/system/docker.service 加入以下内容: [Unit] Description=Docker Application Container Engine Documentation.../inspect/rm 容器name(或ID) 查看正在运行的容器 docker ps 查看所有容器(包括正在运行的、停止的,不包括删除的) docker ps -a 镜像的删除(删除镜像前请删除所有与该镜像有关的容器

    3.1K20

    docker容器中使用root用户执行脚本 (

    应用容器化之后,在docker容器启动时,默认使用的是root用户执行命令,因此容器中的应用默认都是使用root用户运行的,存在很高的安全风险,那么如何能够使用root的业务用户运行应用呢,下面我将举一个简单的例子来说明...该例子是在容器中使用自建的用户运行一个简单的shell脚本,并将脚本输出日志持久到容器外部。接下来让我们来看制作镜像到容器运行的全过程吧。...dockerfile内容如下 [root@host09 test]# cat Dockerfile FROM docker.io/ubuntu:14.04   MAINTAINER hepengfei...chown hpf:hpf test.sh RUN chmod 755 test.sh ENTRYPOINT su - hpf -c "/data/scripts/test.sh" --使用所创建的用户运行脚本...[root@host09 test]# chmod 777 /data/hepf/log [root@host09 test]# docker run -it -v /data/hepf/log:/

    2.1K10

    docker root用户修改mount到容器的文件出现“Operation not permitted

    使用环境centos7 x86-64 内核版本4.19.9 docker使用root用户启动,daemon.json配置文件内容如下: # cat daemon.json { "userns-remap...-rw-r--r--. 1 65534 65534 0 Dec 18 08:49 test.sh 命名空间的root用户所拥有的权限主要看该命名空间所映射到root namespace的uid和gid...65536 解决方法: 一种解决方法就是修改root namespace下/mnt的属性,让其成为容器中root 用户对应的uid,即231072 # chown 231073:231072 test.sh...-rw-r--r--. 1 root root 0 Dec 18 08:49 test.sh 根据上述配置,容器的root用户拥有root namespace下uid [231072,231072...user namespace,以系统root用户执行操作 当程序执行对文件(目录)的操作时,其进程的EUID必须与文件(目录)的EUID保持一致,上述的test.sh是由root namespace的root

    5.1K20

    0520-如何使用root用户启动CM的Server和Agent服务

    对于这种情况,Cloudera官方提供了一种单用户安装CDH的模式,参考Fayson前面的文章《0517-如何在CDH5中使用单用户模式》。...本文基于一个实际需求,即CDH相关的所有服务都使用root用户来管理,主要是Cloudera Manager Server和Agent服务(其他Hadoop服务默认都是使用相应自己的用户比如hdfs或者...实现思路是先从操作系统自启动里移除,然后设置相关脚本,文件和日志的权限来实现使用root用户的手动启动,这样可以实现未来的root用户来管理Server和Agent服务,而Hadoop相关服务大部分情况下都可以通过...4 总结 1.本文Fayson尝试手动做一些修改后,使用root用户来启停server和agent服务,都以失败告终。...,具体可以参考《0517-如何在CDH5中使用单用户模式》。

    2K20

    如何在Ubuntu 16.04上安装和使用Docker

    具有sudo权限的root用户,Ubuntu 16.04的初始设置教程介绍了如何设置它。 注意: Docker需要64位版本以及内核版本等于或大于3.10的Ubuntu。...本教程中的所有命令都应以root用户身份运行。如果命令需要root访问权限,则前面会有sudo。Ubuntu 16.04的初始安装教程介绍了如何添加用户并为他们提供sudo访问权限。...它也可以由docker组中的用户运行,该用户Docker安装期间自动创建。...: sudo usermod -aG docker username 本文的其余部分假定您以docker用户组中的用户身份运行docker命令。...第七步 - 列出Docker容器 使用Docker一段时间后,您的计算机上将有许多活动(运行)和活动容器。

    3.4K30

    如何丝滑般将 Kubernetes 容器运行 Docker 切换成 Containerd

    前面我们安装的集群默认使用的是 Docker 作为容器运行时,那么应该如何将容器运行 Docker 切换到 containerd 呢?...docker 之外的容器运行时都应该指定为 remote),然后第二个参数 --container-runtime-endpoint 是用来指定远程的运行时服务的 endpiont 地址的,在 Linux...我们当然可以直接使用 ctr 命令来直接管理镜像或容器资源,但是我们在使用过程中明显可以感觉到该工具没有 docker CLI 方便,使用便捷性和功能性上考虑,我们更推荐使用 crictl 作为管理工具...接下来我们就先简单介绍下如何使用 crictl 工具来提升管理容器运行时的效率。...当使用 Docker 作为 Kubernetes 容器运行时的时候,容器日志的落盘是由 Docker 来完成的,日志被保存在类似 /var/lib/docker/containers/<CONTAINER

    4.1K11

    如何在CentOS 7上安装和使用Docker

    准备 64位CentOS 7 腾讯云CVM 一台已经设置好可以使用sudo命令的root账号的CentOS服务器,并且已开启防火墙。...注意: Docker需要64位版本的CentOS 7以及等于或大于3.10的内核版本。默认的64位CentOS 7 腾讯云CVM满足这些要求。 本教程中的所有命令都应以root用户身份运行。...第1步 - 安装Docker 官方CentOS 7存储库中提供的Docker安装包可能不是最新版本。要获得最新和最好的版本,请官方Docker存储库安装Docker。本节将向您展示如何做到这一点。...它也可以由docker组中的用户运行,该用户Docker安装期间自动创建。...第7步 - 列出Docker容器 使用Docker一段时间后,您的计算机上将有许多活动(运行)和活动容器。

    3.3K01

    如何丝滑般将 Kubernetes 容器运行 Docker 切换成 Containerd

    前面我们安装的集群默认使用的是 Docker 作为容器运行时,那么应该如何将容器运行 Docker 切换到 containerd 呢?...docker 之外的容器运行时都应该指定为 remote),然后第二个参数 --container-runtime-endpoint 是用来指定远程的运行时服务的 endpiont 地址的,在 Linux...我们当然可以直接使用 ctr 命令来直接管理镜像或容器资源,但是我们在使用过程中明显可以感觉到该工具没有 docker CLI 方便,使用便捷性和功能性上考虑,我们更推荐使用 crictl 作为管理工具...接下来我们就先简单介绍下如何使用 crictl 工具来提升管理容器运行时的效率。...当使用 Docker 作为 Kubernetes 容器运行时的时候,容器日志的落盘是由 Docker 来完成的,日志被保存在类似 /var/lib/docker/containers/<CONTAINER

    97430

    如何在 Ubuntu 20.04 上安装和使用 Docker

    一个容器表示一个应用的运行环境,并且包含软件运行所需要的所有依赖软件。 Docker 是现代软件开发,持续集成,持续交付的一部分。 这篇教程将会涉及如何在 Ubuntu 上安装 Docker。...如果你想阻止 Docker 自动更新,锁住它的版本: sudo apt-mark hold docker-ce 二、以 Root 用户身份执行 Docker 默认情况下,只有 root 或者 有 sudo...想要以 root 用户执行 Docker 命令,你需要将你的用户添加到 Docker 用户组,该用户组在 Docker CE 软件包安装过程中被创建。...这个容器将会在打印消息后停止运行,因为它没有任何长期运行的进程。 默认情况下,Docker Docker Hub 拉取镜像。它是一个云端服务,主要用来储存 公有和私有源中的 Docker 镜像。...运行下面的命令停止所有正在运行的容器,并且移除所有的 docker 对象: docker container stop $(docker container ls -aq) docker system

    6.2K41

    Docker学习笔记之docker volume 容器卷的那些事(二)

    本篇文章的内容依旧是有关 volume 的内容,主要讲诉的是如何解决非 root 用户下的文件映射问题。博主将自己常遇到的一些问题总结如下。 事情要从博主使用 prometheus 说起。...在 Dockerfile 中明显的看到: USER nobody 以前的 root 用户切换到了 nobody 用户(为了安全考虑)。...其基本运行方式是: # 声明一个容器卷 /data,并在 /data 目录下新建 a.txt 文件 $ docker run --name data_container -v /data alpine...切换用户 有没有更好的方式去实现呢?有的,这种方式较第一种优点是自动化,不需要手动更改文件权限。具体流程是: 切换为 root 用户。 更改目录权限到当前 root 用户。...用 gosu 以 root 用户执行命令。 这里需要自行书写 Dockerfile 构建镜像。

    1.3K20
    领券