Docker exec bash -c 使用详解与 Python 封装示例

embedded/2024/10/15 3:56:46/

简介docker exec 是 Docker 的一个实用命令,允许在正在运行的容器中执行命令。通过 bash -c 选项,可以执行复杂的命令串。

历史攻略:

go:远程执行系统命令

Python:subprocess模块

Python-subprocess激活远程conda

使用 docker exec bash -c 的好处:

  1. 灵活执行: 允许在容器内执行复杂命令或脚本。

  2. 便捷调试: 快速在容器内验证和调试配置。

  3. 不干扰主进程: 在容器内运行命令而不会影响主进程。

  4. 效率提升:无需进入容器即可直接执行命令。

  5. 自定义扩展: 封装脚本支持灵活自定义和扩展。

案例源码:

# -*- coding: utf-8 -*-
# time: 2024/09/03 20:37
# file: bash_command.py
# author: tom
# 微信公众号: 玩转测试开发
import subprocessdef execute_in_container(container_name: str, command: str) -> None:"""在指定的 Docker 容器内执行命令。:param container_name: 容器名称或 ID:param command: 要执行的命令"""full_command = ["docker", "exec", container_name, "bash", "-c", command]try:# 执行命令并获取输出result = subprocess.run(full_command, check=True, text=True, capture_output=True)print(f"命令输出:\n{result.stdout}")except subprocess.CalledProcessError as e:print(f"命令执行失败:\n{e.stderr}")if __name__ == "__main__":# 示例调用execute_in_container("mydocker_command", "echo 'Hello, Docker!'")execute_in_container("mydocker_command", "cd /home && touch aaa.txt && ls -al /home/")

运行结果:

# python main.py 
命令输出:
Hello, Docker!命令输出:
total 8
drwxr-xr-x 1 root root 4096 Sep  3 16:58 .
drwxr-xr-x 1 root root 4096 Sep  3 16:57 ..
-rw-r--r-- 1 root root    0 Sep  3 16:59 aaa.txt

注意事项:
1、确保容器名称或 ID 正确且容器正在运行。

2、执行的命令需谨慎,避免执行不安全的命令。

3、确保容器内的用户具有执行命令的权限。

4、命令需与容器内的操作系统和环境兼容。

5、处理命令执行错误并获取详细信息以帮助排错。

小结:通过上述 Python 封装,可以更加灵活地在 Docker 容器中执行命令,提升操作的效率和便捷性。

图片![
在这里插入图片描述](https://i-blog.csdnimg.cn/direct/36417af5f5504d8b9a668c4a3c6dda61.png)


http://www.ppmy.cn/embedded/127681.html

相关文章

【docker】mysql8.0 的 docker 安装

安装 指定mysql 的安装版本8.0.18 拉取镜像 docker pull mysql:8.0。18创建目录 mkdir -p /opt/docker_volumn/mysql/conf mkdir -p /opt/docker_volumn/mysql/log mkdir -p /opt/docker_volumn/mysql/data mkdir -p /opt/docker_volumn/mysql/mysql-files此步骤是为了将容…

【STM32 Blue Pill编程实例】-OLED显示DHT22传感器数据

OLED显示DHT22传感器数据 文章目录 OLED显示DHT22传感器数据1、DHT22介绍2、硬件准备与接线3、模块配置3.1 定时器配置3.2 DHT22引脚配置3.3 OLED配置4、代码实现在本文中,我们将介绍如何将 DHT22 温度和湿度传感器与 STM32 Blue Pill 开发板连接,并使用 HAL 库在 STM32CubeI…

【数论】有关模运算的巧妙

目录 萌萌的好数题目描述输入描述:输出描述:示例1输入输出说明 解方法一方法二方法三 萌萌的好数 链接:https://ac.nowcoder.com/acm/contest/84851/D 来源:牛客网 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 26214…

等保测评的持续改进机制:构建动态安全防御体系

等保测评的持续改进机制:构建动态安全防御体系 在当今数字化转型的浪潮中,企业面临着日益复杂和多样的网络安全威胁。等保测评(信息安全等级保护测评)作为确保信息系统安全性的重要手段,其持续改进机制对于构建动态安…

电子电气架构 --- 智能网联汽车未来是什么样子?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

日期类的实现和取地址运算符重载

前面将类学的差不多,接下来我们就来实现一下日期类。这个日期类包含运算符重载和前面学 的C的语法知识。 首先我们先建立一个日期类的头文件和源文件: 一.日期类的头文件实现: 首先我们要知道我们有闰年,还有每个月的天数也不一样…

腾讯云SDK点播播放数据

点播播放质量监控提供点播播放全链路的数据统计、质量监控及可视化分析服务。支持实时数据上报、数据聚合、多维筛选和精细化定向分析,可帮助企业实时掌控大盘运营状况、了解用户习惯和行为特征,有效指导运营决策、驱动业务增长。 注意事项 点播播放质…

装饰器模式(C++)

定义:装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许你向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于对象结构型模式,它是通过创建一个包装对象,也就是…