Rails 应用 docker 容器无法从 Windows 主机访问
Rails app docker container not accessible from Windows host
我正在尝试制作一个简单的 docker 容器,其中 运行 是我在其中启动它的目录中的 Rails 应用程序。
一切似乎都很好,除非我 运行 容器并尝试从我的 Windows 主机访问它 Docker 机器给我的 IP 地址,它响应连接被拒绝的错误消息。
我什至使用了 Nginx Docker文件作为参考,因为 Nginx Docker文件实际上构建了一个我可以访问的容器。
这是我目前的 Docker 文件:
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 服务器修改为侦听 0.0.0.0 是否解决了问题?
您可以使用 rails s
的 -b
标志来做到这一点:
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
端口只暴露给运行docker里面的vm。您仍然必须将虚拟机的端口 80 暴露给本地计算机,以便它可以连接到它。我认为最好的方法是让您的容器在 7070
之类的可选端口上被监听,然后使用简单的 nginx 代理传递将内容提供给外部(监听端口 80)
我正在尝试制作一个简单的 docker 容器,其中 运行 是我在其中启动它的目录中的 Rails 应用程序。
一切似乎都很好,除非我 运行 容器并尝试从我的 Windows 主机访问它 Docker 机器给我的 IP 地址,它响应连接被拒绝的错误消息。
我什至使用了 Nginx Docker文件作为参考,因为 Nginx Docker文件实际上构建了一个我可以访问的容器。
这是我目前的 Docker 文件:
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 服务器修改为侦听 0.0.0.0 是否解决了问题?
您可以使用 rails s
的 -b
标志来做到这一点:
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
端口只暴露给运行docker里面的vm。您仍然必须将虚拟机的端口 80 暴露给本地计算机,以便它可以连接到它。我认为最好的方法是让您的容器在 7070
之类的可选端口上被监听,然后使用简单的 nginx 代理传递将内容提供给外部(监听端口 80)