Клиент Django google kubernetes не запускает exe внутри задания

У меня есть образ docker, который я хочу запустить внутри моего кода django. Внутри этого образа есть исполняемый файл, который я написал на c++ и который записывает свой вывод в облачное хранилище google. Обычно, когда я запускаю код django следующим образом:

container = client.V1Container(name=container_name, command=["//usr//bin//sleep"], args=["3600"], image=container_image, env=env_list, security_context=security)

И вручную зайдите внутрь контейнера, чтобы выполнить следующее:

gcloud container clusters get-credentials my-cluster --region us-central1 --project proj_name  && kubectl exec pod-id -c jobcontainer -- xvfb-run -a "path/to/exe"

Работает как положено и отдает вывод в облачное хранилище. (Мне нужно использовать виртуальный монитор, поэтому я сначала использую xvfb). Однако я должен вызвать это через django следующим образом:

container = client.V1Container(name=container_name, command=["xvfb-run"], args=["-a","\"path/to/exe\""], image=container_image, env=env_list, security_context=security)

Но когда я делаю это, задание создается, но никогда не завершается и не выдает выходной сигнал в хранилище. Когда я захожу в свой контейнер для запуска ps aux, я получаю следующий результат:

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0   2888  1836 ?        Ss   07:34   0:00 /bin/sh /usr/bin/xvfb-run -a "path/to/exe"
root          16  0.0  1.6 196196 66256 ?        S    07:34   0:00 Xvfb :99 -screen 0 1280x1024x24 -nolisten tcp -auth /tmp/xvfb-run.r5gaBO/Xauthority
root          35  0.0  0.0   7016  1552 ?        Rs   10:31   0:00 ps aux

Похоже, что он застрял внутри моего кода, но в моем коде нет цикла, внутри которого он мог бы застрять, возможно, произошла ошибка (я так не думаю, поскольку точно такая же команда работает при вводе вручную). Если ошибка есть, как я могу увидеть вывод консоли? Почему мой код застревает и как я могу получить желаемый результат? Может ли ошибка быть вызвана разрешениями (код делает много вещей, которые требуют разрешений, например, запись в хранилище и чтение файлов внутри капсулы, но, как уже упоминалось, он работает нормально, когда я запускаю его через командную строку)?

При работе с Docker и Django довольно часто случаются ситуации, когда контейнер постоянно перезапускается / не запускается. Обычно это указывает на проблему в Django, и логи показывают нам, что именно не так (не нужно гадать).

Итак, необходимо проверить журналы контейнера

docker logs CONTAINER

Это даст более подробную информацию об ошибке, и, исходя из этого, человек будет знать, как ее исправить, поскольку он получит более конкретную ошибку.

Для тех, кто столкнулся с подобной проблемой, мы исправили ее, добавив команду, которую мы хотим запустить, в конце Dockerfile вместо того, чтобы передавать ее в качестве параметра внутри вызова контейнера django следующим образом:

cmd["entrypoint.sh"]

entrypoint.sh:

xvfb-run -a "path/to/exe"

Вместо того, чтобы вызвать его внутри django, как мы делали раньше, и просто удалить аргумент command из вызова контейнера, чтобы он выглядел следующим образом:

container = client.V1Container(name=container_name, image=container_image, env=env_list, stdin=True, security_context=security)
Вернуться на верх