Can';t访问Docker容器外的服务

Can';t访问Docker容器外的服务,docker,dockerfile,Docker,Dockerfile,我肯定我做了一些简单的错误,但我不能让docker在我的mac上正确地暴露一个端口。以下是我正在做的: 在主机上从头开始: > rails -v Rails 5.0.0.1 > rails new dt6 # ... rails creates a new app > cd dt6 然后在rails应用程序的根目录下添加此Dockerfile: FROM ruby:2.3.1 RUN apt-get update -qq && apt-get install

我肯定我做了一些简单的错误,但我不能让docker在我的mac上正确地暴露一个端口。以下是我正在做的:

在主机上从头开始:

> rails -v
Rails 5.0.0.1
> rails new dt6
# ... rails creates a new app
> cd dt6
然后在rails应用程序的根目录下添加此Dockerfile:

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
然后我构建映像并运行容器

> 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/puma“我准备好开始服务”的消息。但是,从主机上,我无法访问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服务器正在运行。如果我连接到容器并从内部点击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
>docker exec-it dt6\u容器bash
root@6af33aa9c43b:/myapp#curl localhost:3000
#... 来自rails服务器的正常html响应

TLDR:在docker容器中运行rails服务器,当我从主机访问服务器时,得到的响应为空。如果我想从容器外部向运行在此容器内的rails服务器发出http请求,那么我做错了什么?

将3000
暴露到docker文件之后,尝试添加
CMD[“rails”、“server”、“-b”、“0.0.0”]

尝试添加
CMD[“rails”、“server”、“-b”、“0.0.0”]
after
EXPOSE 3000
到你的docker文件。

在我看来,你所做的事情在Linux中可以很好地工作,但在Mac或Windows中却不行,它们使用(或多或少)一个VM来模拟来自
curl$(boot2docker ip):49153的Linuxextract(这是一个例子)您是在使用Docker for Mac还是Docker Machine/Docker Toolbox?我在使用Docker for Mac。在我看来,您所做的工作在Linux中可以很好地工作,但在Mac或Windows中却不行,因为它们使用(或多或少)虚拟机模拟Linuxextract from
curl$(boot2docker ip):49153
(这是一个示例)你是在用Docker for Mac还是Docker Machine/Docker Toolbox?我在用Docker for Mac