Получая объект контейнера
Измените свой код в соответствии со следующим:
import os
import docker
client = docker.from_env()
container = client.containers.run('ubuntu:latest', 'ls -ltr /tmp', volumes={os.getcwd(): {'bind': '/tmp/', 'mode': 'rw'}}, detach=True)
print(container.logs())
# => b'total 4\n-rw-r--r-- 1 1000 1000 215 Feb 14 12:07 main.py\n'
Здесь контейнерный объект является ключом.Чтобы получить его, вы должны передать detach
param как True
.
. Затем он может распечатать результат выполненной команды.
Путем установки потоков
Другой способ получить выходные данные - установить для параметра stream
значение True
, которое возвращает генератор журнала вместо строки.Игнорируется, если значение detach равно true.
lines = client.containers.run('ubuntu:latest', 'ls -la /', volumes={os.getcwd(): {'bind': '/tmp/', 'mode': 'rw'}}, stream=True)
for line in lines:
print(line)
docker-py - это оболочка вокруг API механизма докера.Следовательно, все выполняется внутри контейнера, и результат выполнения доступен через REST.
Используя подпроцесс
Вы можете использовать модуль subprocess
, если хотите выполнить что-то и получить его выводна лету.
import subprocess
subprocess.run(["docker run ..."])
Док: