从ruby调用命令不工作在泊坞窗图像

我创build了一个docker镜像,并在此镜像上安装了tesseract,并使用这个 docker文件和同一个repo中提供的脚本。 然后,我添加了我自己的小ruby应用程序,以便我可以发送图像,并得到结果返回:

require_relative 'bundle/bundler/setup' require 'sinatra' require "json" require 'sinatra/base' require "sinatra/activerecord" require 'sinatra' require 'fileutils' require "carrierwave" require 'carrierwave/datamapper' require "carrierwave/orm/activerecord" require_relative 'models/image' require_relative 'data_mapper_setup' set :protection, except: [ :json_csrf ] port = ENV['PORT'] || 8080 puts "STARTING SINATRA on port #{port}" set :port, port set :bind, '0.0.0.0' CarrierWave.configure do |config| config.root = File.dirname(__FILE__) end get '/' do ({"Hello" => "World!"}).to_json end post '/extractText' do begin path = File.dirname(__FILE__) billID = params[:billID] image = Image.new(file: params[:file]) file = File.new("#{path}#{image.file.url}") system("tesseract #{file} --psm 6 resultsFile.txt") results = File.read("resultsFile.txt") rescue status 402 return "Error reading image" end status 200 return resultsFile.to_json end 

我的dockerfile已经被修改了一下,看起来像这样:

  FROM ubuntu:16.04 RUN apt-get update && apt-get install -y \ autoconf \ autoconf-archive \ automake \ build-essential \ checkinstall \ cmake \ g++ \ git \ libcairo2-dev \ libcairo2-dev \ libicu-dev \ libicu-dev \ libjpeg8-dev \ libjpeg8-dev \ libpango1.0-dev \ libpango1.0-dev \ libpng12-dev \ libpng12-dev \ libtiff5-dev \ libtiff5-dev \ libtool \ pkg-config \ wget \ xzgv \ zlib1g-dev # SSH for diagnostic RUN apt-get update && apt-get install -y --allow-downgrades --allow-remove-essential --allow-change-held-packages openssh-server RUN mkdir /var/run/sshd RUN echo 'root:root' | chpasswd RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config # SSH login fix. Otherwise user is kicked off after login RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd ENV NOTVISIBLE "in users profile" RUN echo "export VISIBLE=now" >> /etc/profile EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"] # Directories ENV SCRIPTS_DIR /home/scripts ENV PKG_DIR /home/pkg ENV BASE_DIR /home/workspace ENV LEP_REPO_URL https://github.com/DanBloomberg/leptonica.git ENV LEP_SRC_DIR ${BASE_DIR}/leptonica ENV TES_REPO_URL https://github.com/tesseract-ocr/tesseract.git ENV TES_SRC_DIR ${BASE_DIR}/tesseract ENV TESSDATA_PREFIX /usr/local/share/tessdata RUN mkdir ${SCRIPTS_DIR} RUN mkdir ${PKG_DIR} RUN mkdir ${BASE_DIR} RUN mkdir ${TESSDATA_PREFIX} COPY ./container-scripts/* ${SCRIPTS_DIR}/ RUN chmod +x ${SCRIPTS_DIR}/* RUN ${SCRIPTS_DIR}/repos_clone.sh RUN ${SCRIPTS_DIR}/tessdata_download.sh RUN groupadd -r tesseract && useradd -r -g tesseract tesseract USER tesseract FROM iron/ruby WORKDIR /app ADD . /app ADD ./bin/textcleaner /usr/local/bin ENTRYPOINT ["ruby", "app.rb"] 

使用以下设置:docker run –rm -it -v $ PWD:/ app -w / app iron / ruby​​:dev bundle update docker run –rm -it -v $ PWD:/ app -w / app iron / ruby​​:dev bundle install –standalone –clean sudo chmod -R a + rw .bundle sudo chmod -R a + rw bundle

这要运行:

 docker run -it --rm -v $PWD:/app -w /app -p 8080:8080 iron/ruby ruby app.rb 

它都运行良好,但是当它到达system("tesseract #{file} --psm 6 resultsFile.txt")我在terminal输出说sh: tesseract: not found ,我不知道为什么。 tesseract应该安装得很好。

此外,如果我添加一个类似的命令像system("docker run tesseract #{file} --psm 6 resultsFile.txt")

我得到的错误: sh: docker: not found

我确定即时通讯缺less一些简单的东西,这是我误解docker不知何故,但我不知道是什么,为什么我不能从一个ruby文件调用这些命令。

另一件事,我虽然会工作是我已经添加了一个脚本文件( ADD ./bin/textcleaner /usr/local/bin' ),有助于预处理传递的图像,但我的ruby应用程序不能find它或者当我打电话给system("bin/textcleaner #{file} #{file})

任何帮助将是伟大的

更新信息:

O还使用下面的github链接来帮助我创build我已经拿出来的Dockerfile,我已经testing和工作。 https://github.com/dphiggs01/docker-tesseract/blob/master/Dockerfile