У меня проблемы с запуском bash-скрипта, который открывает докер-контейнер в интерактивном режиме и выполняет некоторые команды - PullRequest
0 голосов
/ 24 марта 2019

Я использую следующие команды, чтобы открыть контейнер докера в интерактивном режиме, и использую следующие запятые в сеансе bash с этим контейнером.

  docker run -v /scriptsIA:/scriptsIA -v /opt/tomcat/webapps/PokeTrainer/imgIA:/imgsIA -it dbmobilelife/docker-python-opencv-tesseract bash

cd /scriptsIA/

python

from SegmentarImagen import *

extraerNombreUsuarioNiveldeUnaFoto("/imgsIA/andres.jpg")

exit()

exit

Я попытался создать скрипт bash следующим образом:

#!/bin/bash
docker run -v /scriptsIA:/scriptsIA -v /opt/tomcat/webapps/PokeTrainer/imgIA:/imgsIA -it dbmobilelife/docker-python-opencv-tesseract bash
cd /scriptsIA/
python
from SegmentarImagen import *
extraerNombreUsuarioNiveldeUnaFoto("/imgsIA/andres.jpg")
exit()
exit

Однако, когда я выполняю этот bash-скрипт, все, что я получаю, это следующая ошибка:

[root @ poketrainer /] # sh scriptIA.sh docker: Ответ об ошибке от демона: OCIОшибка создания во время выполнения: container_linux.go: 344: запуск процесса контейнера вызвал "exec: \" bash \ r \ ": исполняемый файл не найден в $ PATH": неизвестно.: Нет данных по электронной почте ScriptIA.sh: Линия 4: $ 'python \ r': Нет данных для сценария ScIA.sh: Линия 5: От: Нет, нет никаких данных сценарийIA.sh: Линия 6: Ошибка sintácticocerca del elemento inesperado "/imgsIA/andres.jpg"' 'criptIA.sh: línea 6: extraerNombreUsuarioNiveldeUnaFoto ("/ imgsIA / andres.jpg")

Как выполнить описанный выше скрипт bash без получения ошибок?

1 Ответ

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

Здесь есть несколько проблем с вашим скриптом:

Ошибки \r, такие как:

запуск процесса контейнера вызвал "exec: \" bash \ r \ ": исполняемый файл не найден в $ PATH": неизвестно

И другие подобные ошибки связаны: \r указывает, что в вашем скрипте есть возврат каретки Windows - возможно, он был написан в Windows и смонтирован в ВМ, или ваш редактор каким-то образом добавил эти символы (см. this почта ). Linux ожидает только \n и рассматривает \r как часть вашей команды. Попробуйте запустить dos2unix в вашем файле или убедитесь, что в нем нет специальных символов.


Также у скрипта есть несколько проблем:

  • Вы пытаетесь запустить docker exec, который запускает команду bash, которая cd и запускает скрипт python. Это можно немного упростить (см. Ниже)
  • Вы хотите запустить Python, вероятно, нет необходимости сначала запускать bash, вы можете запустить python команду напрямую
  • Учитывая, что вы хотите запустить 2 команды Python, вам потребуются разрывы строк, это возможно, но не очень удобно . Было бы лучше создать скрипт Python и смонтировать его в образе перед выполнением простой команды python.
  • Было бы также лучше использовать docker exec -w flag вместо использования команды cd для установки рабочего каталога
  • Нет необходимости ни в exit, ни в exit (), поскольку это будет сделано неявно, если больше нет инструкций, которые нужно выполнить

Учитывая все это, вы можете:

  • запустить одну команду, например

    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 тома, которое я вырезал для упрощения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...