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

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

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

应用程序结构是:

.
├── 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","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
    "

config.ru

require "sinatra"
require "./app.rb"

run App

我像这样构建docker镜像:

docker build –rm -t ruby​​_app.

我像这样运行容器:

docker run -d -p 7080:5000 ruby​​_app

然后我尝试验证我可以连接到正在运行的服务(在我的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)无法连接到192.168.59.103端口7080:连接被拒绝

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

最佳答案
更改dockerfile以使用此代码:

["bundle","--host","0.0.0.0","5000"]

相关文章

最近一直在开发Apworks框架的案例代码,同时也在一起修复Apw...
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。...
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,...
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...