【问题标题】:How to conect to a dockerized Sinatra app如何连接到 dockerized Sinatra 应用程序
【发布时间】:2020-04-30 08:43:41
【问题描述】:

我正在尝试 dockerize 一个简单的 Sinatra 应用程序,但是当 Docker 启动时,我无法通过暴露的端口 4567 访问 API。

这是我的 Dockerfile:

FROM ruby:2.7
RUN apt-get update -qq && apt-get install -y build-essential
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app

EXPOSE 4567

CMD [ "bundle", "exec", "ruby", "main.rb", "-p", "4567" ]

然后:

docker build -t my-application .
docker run -p 4567:4567 my-application

当我访问localhost:4567:

enter image description here

但如果我访问容器并发出curl 请求,它会起作用:

docker exec -it bdcbfcaa57aa bash

enter image description here

我看不出我做错了什么。

【问题讨论】:

标签: ruby docker dockerfile sinatra


【解决方案1】:

您的 Sinatra 应用程序很可能侦听 127.0.0.1。您需要将其绑定到 0.0.0.0

在经典的 Sinatra 中,它是通过以下方式完成的:

require 'sinatra'

set :port, 4567
set :bind, '0.0.0.0'

# ... rest of the app

我不确定您的 main.rb 中有什么,但您可能希望添加对 --host 0.0.0.0--bind 0.0.0.0 的支持。

这是一个功能齐全的示例:

Dockerfile:

FROM dannyben/alpine-ruby
WORKDIR /app
COPY . .
RUN gem install puma sinatra
EXPOSE 3000
CMD ruby server.rb

server.rb:

require 'sinatra'

set :port, 3000
set :bind, '0.0.0.0'

get '/' do
  "we are the champions"
end

然后运行:

$ docker build -t temp .
$ docker run --rm -it -p 3000:3000 temp

【讨论】:

    猜你喜欢
    • 2019-11-06
    • 1970-01-01
    • 2017-12-29
    • 2022-06-19
    • 2020-11-18
    • 2019-12-24
    • 2018-02-18
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多