首页 > 其他分享 >【Docker安全】以非root用户身份运行容器

【Docker安全】以非root用户身份运行容器

时间:2024-11-08 18:08:41浏览次数:1  
标签:容器 RUN myuser 用户 以非 创建 Docker root

原创 acchen AC技术与生活

在Docker容器中,以非root用户身份运行应用程序是一种安全实践。这样可以减少容器被攻击的风险,并且当应用程序出现问题时,不会对整个系统造成严重影响。本文将详细介绍如何在Dockerfile中创建用户,并以非root用户身份运行容器。

一、创建用户

在Dockerfile中创建用户,通常需要执行以下步骤:

1.使用RUN指令创建用户。

RUN useradd -m myuser

这里,我们创建了一个名为myuser的用户。-m选项表示创建用户的同时创建用户的主目录。

2.设置用户密码。

RUN echo 'myuser:password' | chpasswd

这里,我们为myuser用户设置了密码password。在实际使用中,应该使用更安全的密码策略,或者使用密钥认证等方式。

3.设置用户的工作目录。

WORKDIR /home/myuser

这里,我们将工作目录设置为/home/myuser,即myuser用户的主目录。

4.修改文件和目录的权限。

RUN chown -R myuser:myuser /app

这里,我们将/app目录的权限修改为myuser用户,这样myuser用户就有权限访问/app目录了。

二、以非root用户身份运行容器

在Dockerfile中创建用户后,我们就可以以非root用户身份运行容器了。这可以通过在CMD或ENTRYPOINT指令中指定用户来实现。

USER myuser
CMD ["start-myapp.sh"]

这里,我们使用USER指令指定了运行容器的用户为myuser,并在CMD指令中指定了启动应用程序的脚本。

三、示例

下面是一个完整的Dockerfile示例,展示了如何在Dockerfile中创建用户,并以非root用户身份运行容器。

FROM ubuntu:latest
# 创建用户
RUN useradd -m myuser
# 设置用户密码
RUN echo 'myuser:password' | chpasswd
# 设置工作目录
WORKDIR /home/myuser
# 修改文件和目录的权限
RUN chown -R myuser:myuser /app
# 切换到myuser用户
USER myuser
# 运行应用程序
CMD ["start-myapp.sh"]

在这个示例中,我们首先从Ubuntu最新版本开始构建镜像。然后,我们创建了一个名为myuser的用户,并设置了密码。接下来,我们将工作目录设置为/home/myuser,并将/app目录的权限修改为myuser用户。最后,我们使用USER指令指定了运行容器的用户为myuser,并在CMD指令中指定了启动应用程序的脚本。

四、总结

本文详细介绍了如何在Dockerfile中创建用户,并以非root用户身份运行容器。通过这种方式,我们可以提高容器运行的安全性,并减少容器被攻击的风险。在实际使用中,我们应该根据需要创建合适的用户,并设置合适的权限,以确保容器运行的安全和稳定。

Docker 的 官网

https://docs.docker.com/manuals/

标签:容器,RUN,myuser,用户,以非,创建,Docker,root
From: https://www.cnblogs.com/o-O-oO/p/18535409

相关文章

  • docker desktop报错0x80070422
    dockerdesktop报错0x80070422deployingWSL2distributionsensuringmaindistroisdeployed:deploying"docker-desktop":importingWSLdistro"无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。\r\n错误代码:Ws1/0x80070422\r\n"output="docker-desktop":e......
  • 配置docker和containerd,使用ca证书访问harbor
    配置docker和containerd,使用ca证书访问harbor目录配置docker和containerd,使用ca证书访问harbordocker配置ca证书访问harborcontainerd配置ca证书访问harbor验证证书有效性docker配置方法containerd配置方法验证证书有效性描述harbor链接汇总harbor部署harbor部署httpsdo......
  • Docker compose命令大全
    DockerCompose常用的命令docker-composeup启动整个应用程序,包括构建镜像、创建容器和运行容器等。可以使用-d参数让应用程序在后台运行。docker-composedown停止并移除整个应用程序的所有容器,包括关联的网络和存储卷等(注意:不会删除对应的容器镜像)。docker-composebuil......
  • docker命令大全
    docker命令docker系统管理dockerversion显示Docker的版本信息,包括Docker版本、API版本和操作系统版本等。dockerinfo显示Docker的系统信息,包括容器数量、镜像数量和容器运行状态等。dockerps列出当前正在运行的容器,可以使用-a参数列出所有容器,还可以使用-q参......
  • Docker修改默认网段
    原文网址:https://blog.csdn.net/qq_30381077/article/details/126928770 一般docker默认的网络端是172.17.0.1的网段,在生产环境中可能会有办公端IP端冲突 停止所有容器优先推荐down掉所有dockerrm$(dockerps-a-q)删除docker 网络docker networklist#my-ne......
  • 快速上手Docker部署Flask项目 附常见问题解决
    一、准备Flask项目1.项目结构有一个app.py文件作为主应用程序入口,内容示例:fromflaskimportFlaskapp=Flask(__name__)@app.route('/')defhello_world():return'Hello,World!'if__name__=='__main__':app.run(host='0.0.0.0&#......
  • 常用docker命令
    systemctlstartdocker#启动docker服务systemctlstopdocker#停止docker服务systemctlrestartdocker#重启docker服务dockerimages#列出所有镜像dockerps-a#列出所有容器dockerstop容器ID#停止运行指定的容器dockerrm容器ID#删除指定......
  • docker如何实时查看项目的日志
    1.使用dockerlogs命令基本语法和原理:dockerlogs命令用于获取容器的日志输出。默认情况下,它会显示容器启动后到当前时间的所有日志内容。当你在容器内的应用程序将日志输出到标准输出(stdout)或标准错误输出(stderr)时,这些日志可以通过dockerlogs命令进行查看。加上-f选项(类似......
  • 轻松上手:在Linux上用Docker部署Cloudreve云盘,远程访问无压力!
    文章目录前言1.安装Docker2.使用Docker拉取镜像3.创建并启动Cloudreve容器4.本地访问测试5.公网远程访问本地Cloudreve5.1内网穿透工具安装5.2创建远程连接公网地址5.3使用固定公网地址远程访问前言本文主要介绍如何在Linux系统使用Docker快速部署Cloudrev......
  • Ubuntu Focal 20.04 (LTS) 安装 Docker
    官方安装文档:https://docs.docker.com/engine/install/ubuntu/系统要求:ubuntu必须是以下几个系统之一,64位。UbuntuNoble24.04(LTS)UbuntuJammy22.04(LTS)UbuntuFocal20.04(LTS)查看系统内核$uname-a安装步骤:1.更新ubuntu$sudoapt-getupdate2.添加Docker库......