Я пытаюсь настроить простое приложение sinatra в контейнере Docker.Я установил модульное приложение Sinatra на стойке с config.ru
:
require 'rubygems'
require 'sinatra'
require "sinatra/reloader"
Dir[File.dirname(__FILE__) + '/controllers/*.rb'].each {|file| require file}
#map controllers
map('/') {run WebController}
Один контроллер /controllers/hello.rb
:
class WebController < Sinatra::Base
register Sinatra::Reloader
get '/' do
"Hello World"
end
get '/test' do
"Hello World I'm a docker app"
end
end
А вот Dockerfile
:
FROM ruby:2.4.0
MAINTAINER Bugs Bunny <bbunny@rubyplus.com>
RUN apt-get update && \ apt-get install -y net-tools
# Install gems
ENV APP_HOME /app
ENV HOME /root
RUN mkdir $APP_HOME
WORKDIR $APP_HOME
COPY Gemfile* $APP_HOME/
RUN bundle install
# Upload source
COPY . $APP_HOME
# Start server
ENV PORT 3000
EXPOSE 3000
CMD ["bundle", "exec", "rackup", "-o", "0.0.0.0", "-p", "3000"]
Gemfile
:
source 'https://rubygems.org'
gem 'rack'
gem 'rack-test'
gem 'sinatra'
gem 'sinatra-contrib'
При запуске docker run -p 3000:3000 sinatra
вывод WEBrick:
[2019-02-24 20:43:08] INFO WEBrick 1.3.1
[2019-02-24 20:43:08] INFO ruby 2.4.0 (2016-12-24) [x86_64-linux]
[2019-02-24 20:43:08] INFO WEBrick::HTTPServer#start: pid=1 port=3000
Проблема заключается в том, что при запуске в Docker-контейнере Sinatra::Reloader
не работаетбольше не обновлять измененный файл контроллера.
Я попытался выполнить ту же команду bundle exec rackup -o 0.0.0.0 -p 3000
на хост-компьютере, и перезагрузка происходит, как и ожидалось.Если я отредактирую /controllers/hello.rb
после обновления страницы на localhost:3000
, изменения будут показаны немедленно.
Когда я запускаю то же приложение в Docker, перезагрузка перестает работать.
Любая помощь приветствуется, tnx.