#docker #kubernetes #containers #openshift #pyodbc
#docker #kubernetes #контейнеры #openshift #pyodbc
Вопрос:
Я использую Openshift для развертывания приложения django, которое использует pyodbc для подключения к внешней базе данных. В настоящее время я хотел запланировать cronjob в openshift, используя файл yaml. Cronjob создается без проблем, но выдает эту ошибку при запуске: (‘IM004’, «[IM004] [unixODBC] [Диспетчер драйверов] Ошибка SQLAllocHandle драйвера в SQL_HANDLE_HENV (0) (SQLDriverConnect)»)
Эта ошибка возникала ранее, поскольку Openshift переопределяет uid при запуске контейнера. Я преодолел эту ошибку, следуя этому обходному пути:https://github.com/VeerMuchandi/mssql-openshift-tools/blob/master/mssql-client/uid_entrypoint.sh
Эта ошибка появляется снова при запуске cronjob, и это может быть связано с той же проблемой uid. Ниже приведен мой файл yaml для планирования cronjob:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: samplecron
spec:
securityContext:
runAsUser: 1001
runAsGroup: 0
schedule: "*/5 * * * *"
concurrencyPolicy: "Forbid"
startingDeadlineSeconds: 60
suspend:
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
jobTemplate:
spec:
template:
metadata:
labels:
parent: "cronjobpi"
spec:
containers:
- name: samplecron
image: docker-registry.default.svc:5000/image-name
volumeMounts:
- mountPath: /path-to-mount
name: "volume-name"
command: [ "python3", "/script.py" ]
volumes:
- name: "vol-name"
restartPolicy: Never
Может кто-нибудь подсказать, как я могу предоставить ту же информацию об идентификаторе пользователя в файле yaml cronjob или любым другим способом решения этой проблемы?
Комментарии:
1. Вам удалось решить эту проблему? просто любопытно, как script.py похоже (таким образом, вы получаете эту ошибку)
2. @Nick смог решить проблему, используя скрипт точки входа, о котором я упоминал выше, и я включил команду для запуска скрипта python внутри . использовать скрипт точки входа и вместо команды: [ «python3», «/script.py » ] [«sh» , «/entrypoint.sh «].. Скрипт python используется для подключения к серверу БД с использованием pyodbc. pyodbc.connect() вызывает проблему, если UID контейнера не записан в etc / passwd, что выполняется скриптом entrypoint, упомянутым выше.
3. Я думаю, вы могли бы опубликовать это даже в качестве ответа 🙂
Ответ №1:
Удалось решить проблему с помощью скрипта entrypoint, о котором я упоминал выше, и я включил команду для запуска скрипта python внутри .использовать скрипт точки входа и вместо команды: [ «python3», «/script.py » ] [«sh» , «/entrypoint.sh «]..Скрипт python используется для подключения к серверу БД с использованием pyodbc. pyodbc.connect() вызывает проблему, если UID контейнера не записан в etc / passwd, что выполняется скриптом entrypoint, упомянутым выше.