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

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

历史攻略:

go:远程执行系统命令

Python:subprocess模块

Python-subprocess激活远程conda

使用 docker exec bash -c 的好处:

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

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

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

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

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

案例源码:

python 复制代码
# -*- coding: utf-8 -*-
# time: 2024/09/03 20:37
# file: bash_command.py
# author: tom
# 微信公众号: 玩转测试开发
import subprocess


def 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 复制代码
# 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)

相关推荐
Dillon Dong14 小时前
【系统运维】Docker版本冲突问题详解:从错误到解决方案
docker·容器
Tel1992530800414 小时前
ENDAT2.2 协议信号转 SSI /BISS-C转换卡 ENDAT2.2 协议信号转DMC多摩川高速协议转换器 互转卡
c语言·开发语言·网络
Dillon Dong14 小时前
【系列主题】从 Docker 构建失败看依赖隔离:多阶段构建的“隐形陷阱”
运维·docker·容器
三品吉他手会点灯15 小时前
C语言学习笔记 - 12.C语言简介 - 一元二次方程详解
c语言·笔记·学习
记录无知岁月15 小时前
【C/C++】头文件包含问题分析
c语言·开发语言·c++
AI服务老曹15 小时前
从底层协议对接说起:基于 GB28181/RTSP 的异构视频流接入架构设计与源码级解析
人工智能·docker
如果'\'真能转义说16 小时前
《数据不丢失!本地挂载的 Docker 一键启动PS1脚本》
运维·docker·容器
郝开16 小时前
Docker Compose 本地环境搭建:mysql
mysql·docker·容器
Dillon Dong16 小时前
【系列主题】拯救 OOM 与构建中断:Next.js 在 Docker 中的静态生成(SSG)避坑指南
开发语言·javascript·docker
笨笨饿16 小时前
66_C语言与微控制器底层开发
linux·c语言·网络·数据结构·算法·机器人·个人开发