Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Can';t向运行docker和docker compose的sinatra应用程序发送请求_Ruby_Mongodb_Docker_Docker Compose_Sinatra - Fatal编程技术网

Ruby Can';t向运行docker和docker compose的sinatra应用程序发送请求

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或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 . $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,这正是问题所在。