Технически вы можете использовать столько отдельных соединений, сколько хотите, в то время как ваша проблема вызвана простой опечаткой - вы не можете использовать ресурсы только из одного расширения с функциями из другого, что вполне очевидно.
Однако вам следует избегать нескольких подключений от одного и того же сценария, независимо от одного API или другого. Поскольку это будет обременять ваш сервер базы данных и исчерпывать его ресурсы. Итак, хотя технически вы можете, вы не должны смешивать разные расширения в своем коде, за исключением короткого периода рефакторинга.
Здесь есть несколько проблем с вашим скриптом:
Ошибки \r
, такие как:
запуск процесса контейнера вызвал "exec: \" bash \ r \ ": исполняемый файл не найден в $ PATH": неизвестно
blockquote>И другие подобные ошибки связаны:
\r
указывает на возврат каретки Windows в вашем скрипте - это было возможно, написано в Windows и смонтировано в виртуальной машине, или ваш редактор каким-то образом добавил эти символы (см. в этом посте ). Linux ожидает только\n
и рассматривает\r
как часть вашей команды. Попробуйте запуститьdos2unix
для вашего файла или убедитесь, что нет специальных символов.
Кроме того, у скрипта есть несколько проблем:
- Вы пытаетесь запустить docker exec, который запускает команду bash, которая cd и запускает скрипт на python. [ 1119] Это можно немного упростить (см. Ниже)
- Вы хотите запустить Python, вероятно, нет необходимости сначала запускать
bash
, вы можете запустить командуpython
напрямую- Учитывая, что вы хотите запустить 2 команды Python, вам потребуются разрывы строк, это возможно, но не очень удобно . Было бы лучше создать скрипт Python и смонтировать его в образе, прежде чем запускать простую команду python.
- Также было бы лучше использовать docker exec
-w
flag вместо использования командыcd
для установки рабочего каталога- Нет необходимости в exit или exit (), так как это будет сделано неявно, когда больше не будет никаких инструкций, которые нужно выполнить
Учитывая все это, вы можете:
выполнить одну команду, такую как [1134 ]
docker exec [...] -it -w /scriptsIA dbmobilelife/docker-python-opencv-tesseract \ echo -e "from SegmentarImagen import *\nextraerNombreUsuarioNiveldeUnaFoto("/imgsIA/andres.jpg")" | python
, в котором вы устанавливаете рабочий каталог с помощью
-w
и запускаете команду Python, передавая ее содержимое через echo и канал (обратите внимание на\n
без пробела, чтобы иметь правильный синтаксис Python)создать скрипт
myscript.py
, например:from SegmentarImagen import * extraerNombreUsuarioNiveldeUnaFoto("/imgsIA/andres.jpg")
, затем смонтировать этот скрипт в контейнер и запустить простую команду python:
docker exec [...] -it -w /scriptsIA -v /path/to/myscript.py:/myscript.py \ dbmobilelife/docker-python-opencv-tesseract \ python /myscript.py
Примечание: [...] предназначены для объемного крепления
-v /scriptsIA:/scriptsIA -v /opt/tomcat/webapps/PokeTrainer/imgIA:/imgsIA
, которое я вырезал для упрощения
Ваша проблема не очень ясна, и я не могу вытащить ваш образ докера, так что я немного догадываюсь, но мне кажется, что вы в своем скрипте bash пытаетесь:
, и это может быть немного, чтобы спросить из файла sh.
Видите ли, скрипт bash - это не список команд, которые ваша ОС запускает одну за другой. когда вы запускаете скрипт bash, это процесс , и у него есть свои правила.
Если вы хотите выполнить все эти задачи одной командой, вам придется разбить ваш скрипт на части:
скрипт python:
//run_python.py
#!/usr/bin/env python
from SegmentarImagen import *
extraerNombreUsuarioNiveldeUnaFoto("/imgsIA/andres.jpg")
exit()
поместите этот скрипт в / scriptsIA dir на вашем хосте, поэтому он будет доступен в контейнере через том.
//run_container.sh
#!/bin/bash
//a cmd var- this is the command we will be executing inside the container:
cmd=cd /scriptsIA/ && python run_python.py
docker run
-v /scriptsIA:/scriptsIA
-v /opt/tomcat/webapps/PokeTrainer/imgIA:/imgsIA
-it dbmobilelife/docker-python-opencv-tesseract $cmd
Теперь вы легко запускаете ./run_container.sh
, чтобы оживить все это. удачи!