如何连接到码头化的 Sinatra 应用程序
How to conect to a dockerized Sinatra app
我正在尝试对一个简单的 Sinatra 应用程序进行 docker 化,但是当 Docker 启动时,我无法通过暴露的端口 4567 访问 API。
这是我的Docker文件:
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
我不明白我做错了什么。
您的 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
.
的支持
这是一个功能齐全的示例:
Docker 文件:
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
我正在尝试对一个简单的 Sinatra 应用程序进行 docker 化,但是当 Docker 启动时,我无法通过暴露的端口 4567 访问 API。
这是我的Docker文件:
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
我不明白我做错了什么。
您的 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
.
这是一个功能齐全的示例:
Docker 文件:
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