Rails 应用程序 docker 容器无法从 Windows 主机访问

arj*_*bar 1 docker dockerfile docker-machine

我正在尝试创建一个简单的 docker 容器,从我启动它的目录运行 Rails 应用程序。

一切似乎都很好,除了当我运行容器并尝试通过 Docker Machine 提供的 IP 地址从 Windows 主机访问它时,它响应连接被拒绝错误消息。

我什至使用了 Nginx Dockerfile 作为参考,因为 Nginx Dockerfile 实际上构建了一个可供我访问的容器。

到目前为止,这是我的 Dockerfile:

FROM ruby:2.3.1

RUN gem install rails && \
apt-get update -y && \
apt-get install -y nodejs


VOLUME ["/web_app"]
ADD . /web_app
WORKDIR /web_app

RUN bundle install

CMD rails s -p 80

EXPOSE 80
Run Code Online (Sandbox Code Playgroud)

我使用此命令构建图像

docker build -t rails_server .
Run Code Online (Sandbox Code Playgroud)

然后我使用这个命令运行它

docker run -d -p 80:80 rails_server
Run Code Online (Sandbox Code Playgroud)

这是我尝试访问该网页的内容:

curl $(docker-machine ip)
Run Code Online (Sandbox Code Playgroud)

这就是我得到的回报:

curl: (7) Failed to connect to 192.168.99.100 port 80: Connection refused
Run Code Online (Sandbox Code Playgroud)

这就是它给我的感觉:

在此输入图像描述

Jes*_*oco 5

这里的问题似乎是应用程序正在侦听 127.0.0.1:80,因此该服务不会接受来自容器外部的连接。您能否检查一下将 Rails 服务器修改为侦听 0.0.0.0 是否可以解决问题?

您可以使用-b以下标志来做到这一点rails s

FROM ruby:2.3.1

RUN gem install rails && \
apt-get update -y && \
apt-get install -y nodejs


VOLUME ["/web_app"]
ADD . /web_app
WORKDIR /web_app

RUN bundle install

CMD rails s -b 0.0.0.0 -p 80

EXPOSE 80
Run Code Online (Sandbox Code Playgroud)