编写 Python 脚本自动化执行 docker 命令 exec

前言

之前一直在用 bash 脚本自动化,但是因为不熟悉语法,总感觉维护脚本的工作量比 python 大,这次重新写一个 Python 脚本来自动化执行 docker 下的命令。即对每个容器执行 exec 命令,我这里的应用是开启每个容器的 SSH 服务。

正文

直接贴代码,container 列表中的容器 id 是我人工 docker ps 添加的,其实这一步应该也能自动化,用字符串处理的方法提取容器 id 和对应容器名。但是又比较费工作量,加上之前已经有了容器 id 的清单了,所以这里就直接人工造表了(不够优雅)。

#! /usr/bin/python3
# -*- encoding: utf-8 -*-
'''
@File    :   server-docker-start-ssh-demo.py
@Time    :   2022/10/26 9:23:00
@Author  :   Haulyn5
@Version :   1.0
@Contact :   https://blog.csdn.net/Haulyn5?type=blog
'''
import subprocess  # 用于开启子进程,执行命令


container=[
"eddb", # 便于查询的备注,如张三;另外容器 id 可以只写前几位,如果足以区分其他容器
"f8bb"  # 便于查询的备注,如李四

]

for container_id in container:
    command = f'docker exec -it {container_id} bash -c "service ssh start"'  # docker 命令,在容器内执行 service ssh start
    output_str = subprocess.run(command, shell=True, capture_output=True)
    print(output_str)  # 这里其实好像不是 str,可以更优雅一点,只输出 output

具体要在每个容器内执行某个命令,把 service ssh start 命令换成需要的命令即可。

其实这里还可以用 python 的 docker 库,但是需要安装,我这里为了省工作量,就直接相当于用 shell 命令去执行了。输出大概如下图所示,可以看到比较杂乱,可以做一些处理只输出需要的内容,这里不做进一步深挖了。

附录

另外,测试的时候,发现 Python 3.6 会不兼容代码,升级到 3.8.10 后可以顺利执行,忘记当时的报错了。。

subprocess 库文档:

nullhttps://docs.python.org/zh-cn/3/library/subprocess.html

 

你可能感兴趣的:(自动化,docker,运维,linux,python)