Docker Rails应用无法提供服务-curl:(56)接收失败:对等重置连接 [英] Docker Rails app fails to be served - curl: (56) Recv failure: Connection reset by peer

查看:72
本文介绍了Docker Rails应用无法提供服务-curl:(56)接收失败:对等重置连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用以下Dockerfile构建一个Rails应用容器:

I build a Rails app container with the following Dockerfile:

$ cat Dockerfile
FROM ruby:2.2

MAINTAINER Luca G. Soave <luca.soave@gmail.com>

RUN apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y mysql-client postgresql-client sqlite3 --no-install-recommends && rm -rf /var/lib/apt/lists/*

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY . /usr/src/app/
RUN bundle install

EXPOSE 3000
CMD ["rails", "server"]

构建成功:

$ docker build -t querier .
Sending build context to Docker daemon 46.75 MB
Sending build context to Docker daemon 
...
Step 10 : CMD rails server
 ---> Running in 8eb62f8a579a
 ---> 65eee929d518
Removing intermediate container 8eb62f8a579a
Successfully built 65eee929d518

容器正在运行:

$ docker logs -f 89ff3bb8c584
=> Booting WEBrick
=> Rails 4.2.0 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2015-01-06 19:56:56] INFO  WEBrick 1.3.1
[2015-01-06 19:56:56] INFO  ruby 2.2.0 (2014-12-25) [x86_64-linux]
[2015-01-06 19:56:56] INFO  WEBrick::HTTPServer#start: pid=1 port=3000

并输出3000 / tcp端口:

and it's exporting 3000/tcp port:

$ docker ps -al
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
89ff3bb8c584        querier:latest      "rails server"      16 minutes ago      Up 16 minutes       0.0.0.0:3000->3000/tcp   gloomy_babbage   

但服务器内部或外部 Docker无法访问:

but the server is not reachable 'internally' or 'externally' Docker:

$ curl 0.0.0.0:3000
curl: (56) Recv failure: Connection reset by peer
$ curl 172.17.0.24:3000
curl: (7) Failed to connect to 172.17.0.24 port 3000: Connection refused

但一切似乎都没问题:

$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' 89ff3bb8c584
172.17.0.24
$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         10.36.32.1      0.0.0.0         UG        0 0          0 wlan0
10.0.3.0        *               255.255.255.0   U         0 0          0 lxcbr0
10.36.32.0      *               255.255.248.0   U         0 0          0 wlan0
172.17.0.0      *               255.255.0.0     U         0 0          0 docker0

$ ping 0.0.0.0
PING 0.0.0.0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.069 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.061 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.069 ms
^C
--- 0.0.0.0 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.061/0.066/0.069/0.007 ms

$ ping 172.17.0.24
PING 172.17.0.24 (172.17.0.24) 56(84) bytes of data.
64 bytes from 172.17.0.24: icmp_seq=1 ttl=64 time=0.085 ms
64 bytes from 172.17.0.24: icmp_seq=2 ttl=64 time=0.107 ms
64 bytes from 172.17.0.24: icmp_seq=3 ttl=64 time=0.076 ms
^C

在浏览器中也一样,但是什么也没有。主机系统是:

I tried also in the browser but nothing. The host sistem is:

$ docker -v
Docker version 1.4.1, build 5bc2ff8
$ uname -a 
Linux basenode 3.11.0-18-generic #32-Ubuntu SMP Tue Feb 18 21:11:14 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

有什么想法吗?

推荐答案

Rails服务器文档指出,默认情况下,服务器绑定到 localhost ,并且通常会阻止dockerized应用程序接受连接。尝试将其更改为 0.0.0.0

Rails server documentation states that the server by default binds to localhost, and this usually prevents dockerized application to accept connections. Try changing it to 0.0.0.0.

这篇关于Docker Rails应用无法提供服务-curl:(56)接收失败:对等重置连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆