Как подключиться к докернизированному приложению Sinatra - PullRequest
1 голос
/ 25 апреля 2020

Я пытаюсь докеризировать простое приложение Sinatra, но при запуске Docker я не могу получить доступ к API через открытый порт 4567.

Это мой 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:

введите описание изображения здесь

но если я получу доступ к контейнеру и сделайте curl запрос, он работает:

docker exec -it bdcbfcaa57aa bash

введите описание изображения здесь

Я не вижу, что я делаю неправильно.

1 Ответ

1 голос
/ 25 апреля 2020

Скорее всего, ваше приложение Sinatra прослушивает 127.0.0.1. Вместо этого вам нужно привязать его к 0.0.0.0.

В Classi c 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
...