Python Docker API должен знать синтаксис присоединения (** kwargs) к контейнеру - PullRequest
3 голосов
/ 08 марта 2019

Я пытаюсь запустить команды для контейнера, как показано ниже:

# container started
container = PythonDockerAPIs.runContainerWithoutLogs(alpineImage, 'tail -f /dev/null', detach=True)
#execute the command
cmd1 = container.exec_run('ls -ltr',stream=True, detach=True)

Есть ли способ прикрепить журналы с помощью attach(**kwargs) к этому контейнеру и распечатать журналы позже?

https://docker -py.readthedocs.io / о / стабильный / containers.html

1 Ответ

1 голос
/ 08 марта 2019

**kwargs просто означает, что перечисленные параметры являются «ключевыми аргументами», поэтому для attach функции она принимает эти параметры (или «аргументы») в любом порядке, используя форму keyword=value:

  • stdout (bool) - включить стандартный вывод.
  • stderr (bool) - включить stderr.
  • stream (bool) - постепенно возвращать вывод контейнера в виде итератора строк, а не отдельной строки.
  • logs (bool) - включить предыдущий вывод контейнера.

Чтобы вызвать эту функцию, вы должны сделать:

logs = container.attach(stdout=True, stderr=True, stream=True, logs=True)

Обратите внимание, что в документации также указано logs - это оболочка для функции attach, поэтому вы можете использовать эту функцию вместо attach.

Редактировать:

Полный пример использования:

import docker
client = docker.from_env()
container = client.containers.run('hello-world', detach=True)

# method 1
print(container.logs())

# method 2
logs = container.attach(stdout=True, stderr=True, stream=False, logs=True)
print(logs)
...