У меня есть докер-контейнер, который выполняет набор операций и печатает вывод на терминал.Я не могу понять, как получить вывод терминала при использовании 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
Чего я хотел бы добиться, так это прикрепить вывод контейнера к моей оболочке и получить отпечатки какПроцесс происходит, а не в конце при выходе из контейнера.