Ruby Can';t向运行docker和docker compose的sinatra应用程序发送请求
你能告诉我我的Dockerfile或docker compose有什么问题吗Ruby Can';t向运行docker和docker compose的sinatra应用程序发送请求,ruby,mongodb,docker,docker-compose,sinatra,Ruby,Mongodb,Docker,Docker Compose,Sinatra,你能告诉我我的Dockerfile或docker compose有什么问题吗 # Dockerfile FROM ruby:2.5.0 RUN apt-get update -qq && apt-get install -y build-essential ENV APP_HOME /app RUN mkdir $APP_HOME WORKDIR $APP_HOME ADD Gemfile* $APP_HOME/ RUN bundle install ADD . $AP
# Dockerfile
FROM ruby:2.5.0
RUN apt-get update -qq && apt-get install -y build-essential
ENV APP_HOME /app
RUN mkdir $APP_HOME
WORKDIR $APP_HOME
ADD Gemfile* $APP_HOME/
RUN bundle install
ADD . $APP_HOME
# docker-compose.yml
version: '3'
services:
db:
image: mongo
volumes:
- $HOME/data/mongodb:/data/db
ports:
- "27017:27017"
web:
build: .
command: rackup config.ru --port 4567
volumes:
- .:/app
ports:
- "4567:4567"
depends_on:
- db
如果我直接用“rackup”命令运行应用程序,它会运行得很好。当我通过“docker compose up”命令运行容器时,问题就开始了,它停止通过“localhost:4567”接受请求。
我看不出这个问题,所以我请求帮助 您的应用程序在localhost之外不可用,其localhost是docker容器,而不是您的系统(您甚至可以尝试从容器内部卷曲localhost,我打赌它会很好地工作)。我不能给你更多的细节,我不擅长这个话题。但您只需将rack绑定到0.0.0.0即可 例如,我以以下方式运行rails应用程序:
bundle exec rails s-p3000-b0.0.0
在您的情况下,它将是:
rackup--主机0.0.0.0--端口…
现在,它甚至可以从您的网络上使用(至少应该是这样)我在使用内置WEBrick服务器在Docker中安装一个简单的Sinatra应用程序时遇到了这个问题。换句话说,我没有
config.ru
文件。如果其他人遇到同样的问题,我想我会发布我的解决方案
我的应用程序是一个“Hello World”应用程序,我只是用来让Sinatra在Docker容器中运行
这是我更改之前的app.rb
require 'sinatra'
get '/' do
'Hello world!'
end
当我运行Docker容器时,我可以看到WEBrick正在运行并准备接受请求。但是当我试图从我的笔记本电脑访问它时,请求从未发送到容器
为了解决这个问题,我添加了set:bind'0.0.0'
到app.rb
,如下所示
require 'sinatra'
set :bind, '0.0.0.0'
get '/' do
'Hello world!'
end
对于需要更复杂配置设置的任何内容,最好将绑定设置添加到配置文件。尝试添加到web服务
链接:
-db
谢谢@Nondv,这正是问题所在。