Advertisement

在Docker容器内用非root用户运行脚本命令

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本文介绍了如何在Docker容器中使用非root权限执行脚本和命令的方法,提升安全性并减少潜在风险。 应用容器化之后,在Docker容器启动时,默认使用的是root用户执行命令,因此容器中的应用默认都是以root用户来运行的,存在很高的安全风险。那么如何能够使用非root的业务用户来运行应用呢?下面我将通过一个简单的例子来进行说明:在容器中使用自建的用户来运行一个简单的shell脚本,并且将该脚本输出的日志持久化到容器外部。 接下来让我们来看从制作镜像到启动容器的全过程。首先,构建镜像时我会采用Dockerfile的方式来完成这项任务,基础镜像是Ubuntu 14.04(需要先拉取此镜像:`docker pull ubuntu:14.04`)。以下是用于创建自定义用户和运行shell脚本的Dockerfile示例内容: ``` # 使用ubuntu 14.04作为构建的基础 FROM ubuntu:14.04 # 创建一个非root业务用户 RUN useradd -ms /bin/bash myuser \ && echo myuser ALL=(ALL) NOPASSWD:ALL >> /etc/sudoers # 将脚本段落件添加到容器中,这里假设脚本名为app.sh,并且放在/home/myuser目录下。 COPY app.sh /home/myuser/app.sh RUN chmod +x /home/myuser/app.sh # 设置容器启动时的用户为myuser USER myuser # 定义运行命令以执行shell脚本并输出日志到外部文件中 CMD [sh, -c, /home/myuser/app.sh > /path/to/logfile.log] ```

全部评论 (0)

还没有任何评论哟~
客服
客服
  • Dockerroot
    优质
    本文介绍了如何在Docker容器中使用非root权限执行脚本和命令的方法,提升安全性并减少潜在风险。 应用容器化之后,在Docker容器启动时,默认使用的是root用户执行命令,因此容器中的应用默认都是以root用户来运行的,存在很高的安全风险。那么如何能够使用非root的业务用户来运行应用呢?下面我将通过一个简单的例子来进行说明:在容器中使用自建的用户来运行一个简单的shell脚本,并且将该脚本输出的日志持久化到容器外部。 接下来让我们来看从制作镜像到启动容器的全过程。首先,构建镜像时我会采用Dockerfile的方式来完成这项任务,基础镜像是Ubuntu 14.04(需要先拉取此镜像:`docker pull ubuntu:14.04`)。以下是用于创建自定义用户和运行shell脚本的Dockerfile示例内容: ``` # 使用ubuntu 14.04作为构建的基础 FROM ubuntu:14.04 # 创建一个非root业务用户 RUN useradd -ms /bin/bash myuser \ && echo myuser ALL=(ALL) NOPASSWD:ALL >> /etc/sudoers # 将脚本段落件添加到容器中,这里假设脚本名为app.sh,并且放在/home/myuser目录下。 COPY app.sh /home/myuser/app.sh RUN chmod +x /home/myuser/app.sh # 设置容器启动时的用户为myuser USER myuser # 定义运行命令以执行shell脚本并输出日志到外部文件中 CMD [sh, -c, /home/myuser/app.sh > /path/to/logfile.log] ```
  • 使Docker启动服务
    优质
    本文介绍了如何通过编写和执行Docker脚本命令来高效地启动和管理容器服务,适合初学者快速上手。 提供一个通用脚本用于一键启动Docker容器内的服务,支持自定义启动参数、Docker仓库地址、TAG名称以及镜像名称。
  • Run-In-LXC-Action:LXC的GitHub操作
    优质
    Run-In-LXC-Action 是一个专为LXC容器设计的GitHub操作工具,允许用户通过命令脚本便捷地自动化执行任务和测试环境配置。 在LXC容器中运行这是用于在LXC容器内执行命令或脚本的GitHub操作。 目前,在GitHub上可用的唯一Linux运行器是基于Ubuntu的操作系统。然而,根据特定需求,您可能需要在一个不同的Linux发行版(例如Fedora、Debian、openSUSE等)上进行测试或构建工作。因此创建了此操作来解决该问题。 配置和使用方法如下:在您的工作流中将此操作用作步骤: ```yaml jobs: test-fedora-33: runs-on: ubuntu-latest steps: - name: Run in LXC (Fedora 33) uses: wsdfhjxc/run-in-lxc-action@1.x with: distr: fedora ```
  • Linux Shell中从root切换为普通的方法
    优质
    本文介绍了如何在编写Linux Shell脚本时,实现从root用户权限切换到普通用户权限来执行特定命令的方法和步骤。 今天分享如何在Linux Shell脚本中从root用户切换到普通用户以执行命令或脚本的方法,这对于大家来说非常有参考价值。希望这篇文章能帮到各位读者。
  • 使VBS静默DOS
    优质
    简介:介绍如何通过编写VBS(Visual Basic Script)脚本来执行DOS命令,实现自动化操作而不需用户交互。适合用于系统维护或软件部署等场景。 引用VBS脚本可以静默执行DOS命令而不显示任何窗口,主要用于软件后台操作,请勿恶意使用。
  • ShellSCP和SSH
    优质
    本文介绍了如何通过编写Shell脚本来自动化远程文件传输及系统管理任务,具体讲解了SCP与SSH命令的集成使用方法。 通过Shell脚本执行scp和ssh命令可以实现自动化文件传输和远程主机操作。这种方法在管理和维护多台服务器时非常有用。编写此类脚本需要确保正确设置SSH密钥以避免每次登录都需要输入密码,从而提高效率并简化流程。 以下是使用shell脚本来自动执行SCP与SSH任务的基本步骤: 1. 创建一个包含所需命令的Shell脚本段落件。 2. 使用`ssh-keygen`生成SSH公私钥对,并将公钥复制到目标服务器上以启用无密码登录。 3. 在Shell脚本中,利用scp命令来安全地传输文件或目录。例如: ``` scp -r /path/to/local/directory user@remote_host:/destination/path ``` 4. 使用ssh命令执行远程主机上的操作,如启动服务、运行备份脚本等。例如: ``` ssh user@remote_host service example start ``` 通过这种方式,可以创建灵活且强大的自动化解决方案来管理多台服务器环境中的任务和配置更新。
  • Shell中进切换以执的操作
    优质
    本文介绍了如何在Linux Shell脚本中通过用户切换来执行特定命令的方法,包括使用su和sudo指令的具体示例。 本段落主要介绍了如何在Shell脚本中实现切换用户并执行命令的操作,并通过示例代码进行了讲解。看完示例后会发现其实非常简单,有需要的朋友可以参考一下。
  • Django启动的方法
    优质
    本文介绍了如何使用Django框架在命令行环境中执行Python脚本的具体步骤和方法。通过这些指导,你可以更高效地进行Django项目的开发工作。 在Django框架中,命令行工具和执行脚本是开发者进行日常操作的重要组成部分,它们能够高效地处理数据、运行管理任务以及自动化流程。本段落将详细解释如何使用Django启动命令行以及执行脚本。 首先了解Django的`shell`命令。它提供了一个交互式的Python环境,在这个环境中可以加载了Django的所有配置,包括模型和设置等。这使得在命令行中可以直接访问和操作数据库,进行对象的创建、更新和查询等操作。启动`shell`的方法是在项目的根目录下运行以下命令: ```bash pathtoyourvirtualenvbinpython manage.py shell ``` 在这个环境中可以像下面这样直接操作你的模型: ```python # 假设有一个名为Apples的模型 from yourapp.models import Apples all_apples = Apples.objects.all() print(all_apples) ``` 接下来,我们将讨论如何在Django中创建并执行自定义脚本。通常这些脚本用于执行管理任务如定时任务或数据迁移等。为了创建一个自定义脚本,你需要在你的应用目录下创建一个名为`management`的子目录,在这个目录里再新建一个叫做`commands`的子目录。然后在这个`commands`目录中你可以添加Python文件作为命令脚本。 下面是一个简单的示例: ```python # -*- coding: utf-8 -*- from django.core.management.base import BaseCommand class Command(BaseCommand): def handle(self, *args, **options): from monitor.ticket_monitor import main_entry print(gogo) main_entry() ``` 这个脚本继承了`BaseCommand`类,这是Django提供的基础命令类。它包含了处理命令行参数和输出的基本功能。`handle()`方法是执行命令时调用的函数,在这里可以放置你的核心业务逻辑。 要运行自定义脚本,只需在命令后面加上脚本的名字: ```bash pathtoyourvirtualenvbinpython manage.py AutoCheckTicket ``` 当你运行这个命令时,Django会加载应用上下文,并执行`handle()`方法中的代码。通过这种方式,开发者可以更便捷地管理项目并执行各种复杂的任务。 此外,利用Django的命令行工具还可以轻松与数据库进行交互和操作模型对象等,极大地提高了开发效率。在实际使用中可以根据需要创建多个脚本用于不同的管理任务如数据备份、日志分析及邮件发送等等。
  • 通过ShellPHP
    优质
    本文将介绍如何在Linux系统中利用Shell命令行环境执行PHP脚本文件,帮助开发者高效地进行代码测试与部署。 在Linux系统下安装好的PHP运行环境,可以使用Shell调用PHP脚本,并且附带相关工具。
  • ShellHive和Sqoop的方式
    优质
    本文介绍了如何使用Shell脚本来执行Hive和Sqoop命令,提供了自动化数据处理与分析任务的方法。 今天为大家分享如何使用Shell脚本执行Hive和Sqoop命令的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随文章继续了解吧。