docker-py: Как получить код выхода, возвращаемый процессом, выполняющимся внутри контейнера? - PullRequest
0 голосов
/ 02 января 2019

Мой скрипт Python использует docker-py для запуска контейнера Docker следующим образом:

client = docker.from_env()
result = client.containers.run(
    image="my-prog-image:latest",
    command=["/etc/my-prog/configs.ini"],
    auto_remove=True,
    network_mode="host",
)

Как описано docker-py: container , метод client.containers.run(...) возвращает контейнер.Как я могу получить код выхода, возвращаемый my-prog, работающим внутри контейнера?

1 Ответ

0 голосов
/ 02 января 2019

result.wait() следует дождаться завершения работы контейнера, а затем вернуть код выхода.

Однако вы, вероятно, столкнетесь с некоторыми проблемами, поскольку вы указываете auto_remove=True, но не указываете detach=True. run() без detach=True запустит контейнер до завершения, затем опция auto_remove=True удалит контейнер, и в этот момент код состояния больше не существует. Вы можете явно разделить эти шаги:

client = docker.from_env()
container = client.containers.run(
    image="my-prog-image:latest",
    command=["/etc/my-prog/configs.ini"],
    detach=True,
)
result = container.wait()
container.remove()

(С точки зрения Docker CLI вы сделали docker run --rm ..., а затем пытаетесь найти результат контейнера с помощью docker ps -a, но контейнер исчез; я предлагаю изменить его на docker run -d ... без --rm, проверяя вывод docker ps, а затем вручную docker rm контейнер. На самом деле, есть даже команда docker wait CLI , но она редко используется.)

...