在Docker容器中运行Ruby Sinatra无法连接(通过Mac主机)或查找命令(在不同的场景中)?

我尝试了两种forms的Dockerfile来运行一个简单的Ruby / Sinatra应用程序,并且在两种情况下都会因为不同的原因而失败(我将在稍后解释)。

实际上,我想从我的主机访问Sinatra Web服务器(使用Boot2Docker的Mac OS X)。

该应用程序的结构是:

. ├── Dockerfile ├── Gemfile ├── app.rb ├── config.ru 

这些文件的内容是:

Dockerfile

版本1 …

 FROM ruby RUN mkdir -p /app WORKDIR /app COPY Gemfile /app/ RUN bundle install --quiet COPY . /app EXPOSE 5000 ENTRYPOINT ["bash"] CMD ["bundle", "exec", "rackup", "-p", "5000"] 

版本2 …

 FROM ubuntu:latest RUN apt-get -qq update RUN apt-get -qqy install ruby ruby-dev RUN apt-get -qqy install libreadline-dev libssl-dev zlib1g-dev build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev RUN gem install bundler RUN mkdir -p /app WORKDIR /app COPY Gemfile /app/ RUN bundle install --quiet COPY . /app EXPOSE 5000 CMD ["bundle", "exec", "rackup", "-p", "5000"] 

的Gemfile

 source "https://rubygems.org/" gem "puma" gem "sinatra" 

app.rb

 require "sinatra/base" class App < Sinatra::Base set :bind, "0.0.0.0" get "/" do "<p>hello world</p>" end end 

config.ru

 require "sinatra" require "./app.rb" run App 

我build立这样的docker形象:

docker build --rm -t ruby_app .

我运行这样的容器:

docker run -d -p 7080:5000 ruby_app

然后我尝试validation我可以连接到正在运行的服务(在我的Mac上使用Boot2Docker),如下所示:

curl $(boot2docker ip):7080

对于Dockerfile的版本1,我运行curl命令之前得到以下错误:

 /usr/local/bundle/bin/rackup: line 9: require: command not found /usr/local/bundle/bin/rackup: rackup: line 10: syntax error near unexpected token `(' /usr/local/bundle/bin/rackup: rackup: line 10: `ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../../../../app/Gemfile",' 

使用Dockerfile的版本2,它好像从容器内部运行机架服务器,但是我无法通过主机环境连接,所以当运行curl命令时出现错误:

curl: (7) Failed to connect to 192.168.59.103 port 7080: Connection refused

有没有人有什么想法,我失踪了? 似乎不应该很难得到一个非常简单的Ruby / Sinatra应用程序运行在一个Docker容器中,我可以通过我的主机(Mac OS X通过Boot2Docker)访问它。

更改dockerfile来代替:

 ["bundle", "exec", "rackup", "--host", "0.0.0.0", "-p", "5000"]