2016-07-28 97 views
1

我试图使运行从我启动它在目录中的Rails应用程序的简单泊坞窗容器访问。Rails应用程序泊坞窗容器不能从Windows主机

一切似乎都很正常,当我运行的容器除外并尝试从我的Windows主机在Docker Machine提供的IP地址访问它,它会以拒绝连接错误消息的方式响应。

我甚至使用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 

我使用这个命令

docker build -t rails_server . 
构建映像

我然后使用这个命令

docker run -d -p 80:80 rails_server 

而且这里是运行我尝试访问网页:

curl $(docker-machine ip) 

而且这是我得到的结果:

curl: (7) Failed to connect to 192.168.99.100 port 80: Connection refused 

,这是它如何让我觉得:

enter image description here

回答

2

这里的问题似乎是,该应用程序被监听127.0.0.1:80,所以该服务将不接受来自容器外部的连接。你能否检查一下修改rails server是否可以解决问题的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 
+0

太棒了,可以工作。但我不明白为什么。例如,当我进行更多的Rails开发时,我可以像平常一样启动应用程序,同事可以使用我的LAN IP(192.168.xxx.xxx)从机器上启动它。我觉得我应该能够从我的主机连接到我的docker虚拟机,就像另一台计算机可以在局域网上连接到我一样。 – arjabbar

0

端口只露出里面运行的泊坞窗的VM。您还必须将vm的端口80暴露给本地计算机,以便它可以连接到本地计算机。我认为最好的办法是让你的容器在7070之类的可选端口上被监听,然后使用一个简单的nginx代理服务器将内容提供给外部(监听端口80)