#docker #docker-image #dockerpy #docker-pull
#docker #docker-изображение #dockerpy #docker-pull
Вопрос:
Я пытаюсь опубликовать статус загрузки изображения docker в интерфейсе в режиме реального времени. В настоящее время он может просто сказать, что docker pull продолжается. Я понимаю, что может быть несколько слоев разных размеров, и размеры слоев, которые еще не начали загружаться, могут быть неизвестны. Итак, я думаю о том, чтобы показать, сколько слоев существует, и текущее состояние загрузки слоев, которые уже начали загружаться. Знаете ли вы, как захватить данные, которые отображаются на консоли терминала, когда вы это делаете docker pull <image>
? Моя программа написана на Python, поэтому я хотел бы получить данные в коде python и отправить их во внешний интерфейс. Я проверил документацию docker, но не нашел ни одного API, который поддерживает это. Похоже, что пока нет общедоступного API, который поддерживает эту функциональность.
Есть ли у вас какие-либо другие подходы, которые могут реализовать мою цель?
Любые предложения приветствуются и приветствуются!
Спасибо!
Ответ №1:
Для этого вам нужен низкоуровневый 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",
"id": "e5d9363303dd"
}
{
"status": "Downloading",
"progressDetail": {
"current": 764663,
"total": 764663
},
"progress": "[==================================================>] 764.7kB/764.7kB",
"id": "e5d9363303dd"
}
{
"status": "Verifying Checksum",
"progressDetail": {},
"id": "e5d9363303dd"
}
{
"status": "Download complete",
"progressDetail": {},
"id": "e5d9363303dd"
}
{
"status": "Extracting",
"progressDetail": {
"current": 32768,
"total": 764663
},
"progress": "[==> ] 32.77kB/764.7kB",
"id": "e5d9363303dd"
}
{
"status": "Extracting",
"progressDetail": {
"current": 764663,
"total": 764663
},
"progress": "[==================================================>] 764.7kB/764.7kB",
"id": "e5d9363303dd"
}
{
"status": "Extracting",
"progressDetail": {
"current": 764663,
"total": 764663
},
"progress": "[==================================================>] 764.7kB/764.7kB",
"id": "e5d9363303dd"
}
{
"status": "Pull complete",
"progressDetail": {},
"id": "e5d9363303dd"
}
{
"status": "Digest: sha256:c5439d7db88ab5423999530349d327b04279ad3161d7596d2126dfb5b02bfd1f"
}
{
"status": "Status: Downloaded newer image for busybox:latest"
}