我正在使用下一个命令以交互模式打开docker容器,并在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 \”:找不到可执行文件 in $ PATH“:未知。:不存在el fichero o el directorio scriptIA.sh:拉丁语4:$'python \ r':无密码 scriptIA.sh:lnea,5点来自:没有密码保护scriptIA.sh:lnea 6:错误sinácticocerca del elemento inesperado
"/imgsIA/andres.jpg"' 'criptIA.sh: línea 6:
extraerNombreUsuarioNiveldeUnaFoto(“ / imgsIA / andres.jpg”)
我如何做上面解释的bash脚本而不会出错?
答案 0 :(得分:1)
此处的脚本存在多个问题:
\r
错误,例如:
启动容器过程导致“ exec: \“ bash \ r \”:在$ PATH中找不到可执行文件”:未知
与其他类似的错误相关:\r
表示脚本中有Windows回车符-它可能是在Windows上编写并挂载在VM中的,或者您的编辑器以某种方式添加了这些字符(请参见{{ 3}})。 Linux仅期望\n
并将\r
视为命令的一部分。尝试在文件上运行dos2unix
或确保没有特殊字符。
此外,脚本还有几个问题:
bash
,可以直接运行python
命令cd
命令来设置工作目录鉴于所有这些,您可以:
运行单个命令,例如
docker exec [...] -it -w /scriptsIA dbmobilelife/docker-python-opencv-tesseract \
echo -e "from SegmentarImagen import *\nextraerNombreUsuarioNiveldeUnaFoto("/imgsIA/andres.jpg")" | python
您在其中使用-w
设置工作目录,并通过echo和管道传递其内容来运行Python命令(注意\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
卷安装
答案 1 :(得分:0)
您的问题不是很清楚,我无法拉出您的docker映像,所以即时通讯有点猜测,但是对我来说,您似乎在尝试bash脚本:
这可能需要从sh文件中询问。
您看到,bash脚本不是操作系统正在逐个运行的命令列表。 当您运行bash脚本时,这是一个进程,它具有自己的规则。
如果要在一个命令中完成所有这些任务,则必须将脚本分成几部分:
python脚本:
//run_python.py
#!/usr/bin/env python
from SegmentarImagen import *
extraerNombreUsuarioNiveldeUnaFoto("/imgsIA/andres.jpg")
exit()
将此脚本放入主机的/ scriptsIA目录中,以便可以通过该卷在容器中使用它。
//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
来使所有这些变得生动起来。祝你好运!