ruby - 无法向使用 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 . $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”接受请求。 我无法发现问题,这就是我寻求帮助的原因。 🤓

这是“docker-compose up”的日志,以防万一。

Starting tracker_db_1 ... done
Recreating tracker_api_1 ... done
Attaching to tracker_db_1, tracker_api_1
db_1   | 2018-07-30T09:43:17.580+0000 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
db_1   | 2018-07-30T09:43:17.669+0000 I CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=fe12227a1143
db_1   | 2018-07-30T09:43:17.669+0000 I CONTROL  [initandlisten] db version v4.0.0
db_1   | 2018-07-30T09:43:17.669+0000 I CONTROL  [initandlisten] git version: 3b07af3d4f471ae89e8186d33bbb1d5259597d51
db_1   | 2018-07-30T09:43:17.669+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
db_1   | 2018-07-30T09:43:17.669+0000 I CONTROL  [initandlisten] allocator: tcmalloc
db_1   | 2018-07-30T09:43:17.669+0000 I CONTROL  [initandlisten] modules: none
db_1   | 2018-07-30T09:43:17.669+0000 I CONTROL  [initandlisten] build environment:
db_1   | 2018-07-30T09:43:17.669+0000 I CONTROL  [initandlisten]     distmod: ubuntu1604
db_1   | 2018-07-30T09:43:17.669+0000 I CONTROL  [initandlisten]     distarch: x86_64
db_1   | 2018-07-30T09:43:17.669+0000 I CONTROL  [initandlisten]     target_arch: x86_64
db_1   | 2018-07-30T09:43:17.669+0000 I CONTROL  [initandlisten] options: { net: { bindIpAll: true } }
db_1   | 2018-07-30T09:43:17.686+0000 I STORAGE  [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
db_1   | 2018-07-30T09:43:17.700+0000 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=487M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
web_1  | [2018-07-30 09:43:19] INFO  WEBrick 1.4.2
web_1  | [2018-07-30 09:43:19] INFO  ruby 2.5.0 (2017-12-25) [x86_64-linux]
web_1  | [2018-07-30 09:43:19] INFO  WEBrick::HTTPServer#start: pid=1 port=4567
db_1   | 2018-07-30T09:43:29.033+0000 I STORAGE  [initandlisten] WiredTiger message [1532943809:33683][1:0x7f429bbb8a00], txn-recover: Main recovery loop: starting at 7/8576
db_1   | 2018-07-30T09:43:29.787+0000 I STORAGE  [initandlisten] WiredTiger message [1532943809:787811][1:0x7f429bbb8a00], txn-recover: Recovering log 7 through 8
db_1   | 2018-07-30T09:43:30.362+0000 I STORAGE  [initandlisten] WiredTiger message [1532943810:362900][1:0x7f429bbb8a00], txn-recover: Recovering log 8 through 8
db_1   | 2018-07-30T09:43:30.433+0000 I STORAGE  [initandlisten] WiredTiger message [1532943810:433423][1:0x7f429bbb8a00], txn-recover: Set global recovery timestamp: 0
db_1   | 2018-07-30T09:43:30.463+0000 I RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)
db_1   | 2018-07-30T09:43:30.487+0000 I CONTROL  [initandlisten]
db_1   | 2018-07-30T09:43:30.488+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
db_1   | 2018-07-30T09:43:30.488+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
db_1   | 2018-07-30T09:43:30.488+0000 I CONTROL  [initandlisten]
db_1   | 2018-07-30T09:43:30.635+0000 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
db_1   | 2018-07-30T09:43:30.642+0000 I NETWORK  [initandlisten] waiting for connections on port 27017

最佳答案

您的应用程序在 localhost 之外不可用,并且它的 localhost 是 docker 容器,而不是您的系统(您甚至可以尝试从容器内部 curl localhost,我敢打赌它会工作得很好)。我不能给你更多的细节,我不擅长这个话题。但您需要做的只是将 rack 绑定(bind)到 0.0.0.0。

例如,我以这种方式运行我的 Rails 应用程序:

bundle exec rails s -p 3000 -b 0.0.0.0

在你的情况下它将是:

rackup --host 0.0.0.0 --port ...

现在它甚至可以从您的网络中使用(至少应该可以)

关于ruby - 无法向使用 docker 和 docker-compose 运行的 sinatra 应用程序发送请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51591403/

相关文章:

php - 远程服务器上Docker内部的Xdebug远程调试

docker - 选择新标签时基于 Docker 容器的 Azure 函数未更新

shell - 在 docker 中运行 solr 实例

ruby - 在 HTML 中嵌入 Ruby 代码?

ruby - Rails3 和 Datamapper

ruby - 相当于Java中Ruby中的import static

ruby-on-rails - 使用 form_for 时“不会将符号隐式转换为整数”

javascript - findAndModify - MongoError : exception: must specify remove or update

mongodb - spring-boot mongodb 4.0 兼容性

mysql - 玩!框架 - 将 MySQL 和 MongoDB 用于同一应用程序