您能告诉我我的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,我敢打赌它会很好地工作)。我无法提供更多详细信息,我对此话题的态度不强。但是您要做的只是将机架绑定(bind)到0.0.0.0。

例如,我以这种方式运行我的rails应用程序:
bundle exec rails s -p 3000 -b 0.0.0.0
在您的情况下,它将是:
rackup --host 0.0.0.0 --port ...
现在,即使您的网络也可以使用它(至少应该如此)

09-25 18:26
查看更多