• python3 重启docker方法


    一、工作中的问题

    工作中进行测试时,需要修改nacos配置,修改完成后再重启对应的docker容器,让配置生效,研究了下,使用docker库可以做到。

    如何修改nacos配置可以参见我的另一篇文章,传送门 

    python3 修改nacos的yaml配置_xugexuge的博客-CSDN博客

    二、安装docker三方库

    pip install docker

    三、代码如下

    1. import docker
    2. # 创建 Docker 客户端实例
    3. client = docker.from_env()
    4. # 查找正在运行的 Docker 容器
    5. containers = client.containers.list()
    6. for container in containers:
    7. container_name = container.name # docker的名字
    8. container_id = container.id # docker的id
    9. container_status = container.status # docker的状态
    10. """
    11. 这里可以写你的业务逻辑,比如停止某个id的docker,或者停止某个名字的docker
    12. """
    13. container.stop() # 停止docker
    14. container.start() # 启动docker
    15. container.restart() # 重启docker
    16. # 关闭 Docker 客户端连接
    17. client.close()

    四、注意点

    按以上写法,由于 docker 库只能与本地 Docker 引擎进行交互,需要在docker容器的那台服务器上去执行代码

    如果你想要使用 Python 代码远程重启 Docker 容器,可以借助第三方库 paramiko 或者 fabric 来执行远程命令。
    以下是使用 paramiko 远程重启 Docker 容器的示例代码

    示例写法如下

    1. import paramiko
    2. # SSH 连接参数
    3. ssh_host = 'your_host'
    4. ssh_port = 22
    5. ssh_username = 'your_username'
    6. ssh_password = 'your_password'
    7. # 创建 SSH 客户端
    8. client = paramiko.SSHClient()
    9. client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    10. # 连接到远程主机
    11. client.connect(hostname=ssh_host, port=ssh_port, username=ssh_username, password=ssh_password)
    12. # 执行远程命令获取容器列表
    13. command = 'sudo docker ps --format "{{.Names}}"'
    14. stdin, stdout, stderr = client.exec_command(command)
    15. # 处理命令输出,获取容器名称列表
    16. container_names = []
    17. for container_name in stdout.readlines():
    18. container_names.append(container_name.strip())
    19. # 输出容器名称列表
    20. print(container_names)
    21. # 执行远程命令
    22. command = 'sudo docker restart container_name_or_id' # 替换为实际的容器名称或 ID
    23. stdin, stdout, stderr = client.exec_command(command)
    24. # 输出命令执行结果
    25. print(stdout.read().decode('utf-8'))
    26. # 关闭 SSH 连接
    27. client.close()

  • 相关阅读:
    物理层
    8000字讲透OBSA原理与应用实践
    本周的error记录
    flutter逆向 ACTF native app
    SVN 修改版本库地址url路径
    使用GSAP制作动画视频
    驱动开发:通过Async反向与内核通信
    DataParalle(DP) Summary介绍
    如何利用 xUnit 框架对测试用例进行维护?
    Java注释
  • 原文地址:https://blog.csdn.net/xugexuge/article/details/132729834