Rails应用程序泊坞窗容器不能从Windows主机
问题描述:
我试图使运行从我启动它在目录中的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
,这是它如何让我觉得:
答
这里的问题似乎是,该应用程序被监听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
答
端口只露出里面运行的泊坞窗的VM。您还必须将vm的端口80暴露给本地计算机,以便它可以连接到本地计算机。我认为最好的办法是让你的容器在7070
之类的可选端口上被监听,然后使用一个简单的nginx代理服务器将内容提供给外部(监听端口80)
太棒了,可以工作。但我不明白为什么。例如,当我进行更多的Rails开发时,我可以像平常一样启动应用程序,同事可以使用我的LAN IP(192.168.xxx.xxx)从机器上启动它。我觉得我应该能够从我的主机连接到我的docker虚拟机,就像另一台计算机可以在局域网上连接到我一样。 – arjabbar