无法访问Docker容器之外的服务

我敢肯定,我正在做一些简单的错误,但是我无法在我的Mac上得到docker来正确地暴露一个端口。 这是我正在做的事情:

在主机上从头开始:

> rails -v Rails 5.0.0.1 > rails new dt6 # ... rails creates a new app > cd dt6 

然后,我将这个Dockerfile添加到rails应用程序的根目录下:

 FROM ruby:2.3.1 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN mkdir /myapp WORKDIR /myapp ADD Gemfile /myapp/Gemfile ADD Gemfile.lock /myapp/Gemfile.lock RUN bundle install ADD . /myapp EXPOSE 3000 

然后我build立图像并运行容器

 > docker build -t dt6 . > docker run --rm -p 3000:3000 dt6 rails s => Booting Puma => Rails 5.0.0.1 application starting in development on http://localhost:3000 => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.6.0 (ruby 2.3.1-p112), codename: Sleepy Sunday Serenity * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://localhost:3000 Use Ctrl-C to stop 

这看起来像一个正常的铁路/美洲狮“我准备开始服务”的消息。 但是,从主机,我无法访问rails服务器:

 > curl localhost:3000 curl: (52) Empty reply from server 

我知道docker正在用端口3000做一些事情 ,因为我得到了一个随机端口的不同消息:

 > curl localhost:3001 curl: (7) Failed to connect to localhost port 3001: Connection refused 

值得注意的是,rails服务器正在运行。 如果我连接到容器,并从内部击中导轨服务器,它的工作原理:

 > docker exec -it dt6_container bash root@6af33aa9c43b:/myapp# curl localhost:3000 <!DOCTYPE html> <html> <head> #... a normal html response from the rails server 

TLDR:在Docker容器中运行rails服务器,当从主机访问服务器时,我得到一个空的响应。 如果我希望能够向外部的容器中运行的rails服务器发出http请求,我该怎么做呢?

尝试将EXPOSE 3000之后的CMD ["rails", "server", "-b", "0.0.0.0"] EXPOSE 3000EXPOSE 3000文件中。