如何捕获docker pull状态

问题描述

我正在尝试以实时方式将 docker 图像下载状态发布到前端。目前它只能告诉 docker pull 正在进行中。我知道可能有多个不同大小的层,尚未开始下载的层的大小可能未知。所以我在考虑显示有多少层以及已经开始下载的层的当前下载状态。 您知道如何在执行 docker pull <image> 时捕获终端控制台上显示的数据吗?我的程序是用 Python 编写的,所以我想用 Python 代码获取数据并将其发送到前端。我检查了 docker 文档,但没有找到任何支持它的 api。似乎还没有支持功能的公共 API。

您还有其他方法可以实现我的目标吗?

欢迎并感谢任何建议!

谢谢!

解决方法

您需要一个低级别的 pull() 调用 (docs)。举个例子:

>>> import docker
>>> import json
>>> client = docker.APIClient(base_url='unix://var/run/docker.sock')
>>> for line in client.pull('busybox',stream=True,decode=True):
...     print(json.dumps(line,indent=4))
{
    "status": "Pulling from library/busybox","id": "latest"
}
{
    "status": "Pulling fs layer","progressDetail": {},"id": "e5d9363303dd"
}
{
    "status": "Downloading","progressDetail": {
        "current": 8635,"total": 764663
    },"progress": "[>                                                  ]  8.635kB/764.7kB","progressDetail": {
        "current": 764663,"progress": "[==================================================>]  764.7kB/764.7kB","id": "e5d9363303dd"
}
{
    "status": "Verifying Checksum","id": "e5d9363303dd"
}
{
    "status": "Download complete","id": "e5d9363303dd"
}
{
    "status": "Extracting","progressDetail": {
        "current": 32768,"progress": "[==>                                                ]  32.77kB/764.7kB","id": "e5d9363303dd"
}
{
    "status": "Pull complete","id": "e5d9363303dd"
}
{
    "status": "Digest: sha256:c5439d7db88ab5423999530349d327b04279ad3161d7596d2126dfb5b02bfd1f"
}
{
    "status": "Status: Downloaded newer image for busybox:latest"
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...