Как транслировать вывод контейнера Docker на терминал при использовании Docker SDK для Python - PullRequest
0 голосов
/ 18 марта 2019

У меня есть докер-контейнер, который выполняет набор операций и печатает вывод на терминал.Я не могу понять, как получить вывод терминала при использовании Docker SDK для python.

Вот пример того, чего я хочу достичь.Допустим, у меня есть папка, содержащая следующие файлы:

Project
  Dockerfile
  now.py
  dockerpy.py

, где now.py - простой скрипт, который печатает текущее время каждую секунду в течение десяти секунд:

# now.py

from datetime import datetime
import time

for _ in range(10):
    print(datetime.now())
    time.sleep(1)

ИDockerfile создает образ для контейнера, который запускает сценарий:

FROM python
ADD . /code
ENTRYPOINT ["python", "/code/now.py"]

Как только я создаю образ с помощью docker build -t dpytest ., я запускаю dockerpy.py, чтобы запустить контейнер:

# dockerpy.py

import docker
from datetime import datetime

if __name__ == '__main__':

    client = docker.from_env()
    print('{} - Starting\n'.format(datetime.now()))
    container = client.containers.run("dpytest", detach=True)
    for line in container.logs(stream=True):
        print(line.strip())
    print('\n{} - Completed\n'.format(datetime.now()))

Контейнер запускается, выполняется и через 10 секунд выводит весь вывод в сеанс терминала:

$ python dockerpy.py
2019-03-18 12:18:43.508384 - Starting

b'2019-03-18 11:18:44.344516'
b'2019-03-18 11:18:45.345600'
b'2019-03-18 11:18:46.346731'
b'2019-03-18 11:18:47.347814'
b'2019-03-18 11:18:48.348900'
b'2019-03-18 11:18:49.350057'
b'2019-03-18 11:18:50.351209'
b'2019-03-18 11:18:51.352425'
b'2019-03-18 11:18:52.353539'
b'2019-03-18 11:18:53.354598'

2019-03-18 12:18:54.471805 - Completed

Чего я хотел бы добиться, так это прикрепить вывод контейнера к моей оболочке и получить отпечатки какПроцесс происходит, а не в конце при выходе из контейнера.

...