Docker application Rails ne parvient pas à être servi - curl: (56) Recv échec: Connection reset by peer
- Je construire une application Rails récipient avec le suivant 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"]
la construction réussir:
$ 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
le conteneur est en cours d'exécution:
$ 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
et c'est l'exportation 3000/tcp de 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
mais le serveur n'est pas joignable "interne" ou "externe" de 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
mais tout semble ok:
$ 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
J'ai essayé aussi dans le navigateur, mais rien. L'hôte sistem est:
$ 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
Une idée?
OriginalL'auteur Luca G. Soave | 2015-01-06
Vous devez vous connecter pour publier un commentaire.
Les Rails de la documentation du serveur indique que le serveur par défaut se lie à
localhost
, et ce qui empêche habituellement dockerized application d'accepter des connexions. Essayez de la modifier à0.0.0.0
.Je suppose que vous étaient en train de changer la façon dont les rails commence, pas la façon dont vous avez été l'appeler? Va la connexion également être réinitialisé lorsque vous y accédez par le menu fixe IP, dans votre exemple
curl 172.17.0.24:3000
? Serez-vous capable de ping à l'application à partir de l'intérieur du conteneur :docker exec -it <container id> curl localhost:3000
?oui, à partir de l'intérieur, il fonctionne, je serai de retour la page html en faisant "docker exec -il 89ff3bb8c584 curl localhost:3000'
J'ai eu le même problème l'exécution de nodejs dans le panneau. Cela a sauvé ma journée. Merci.
Pas - 0.0.0.0 signifie lier à toutes les interfaces. 127.0.0.1 est l'interface de bouclage qui est relatif à la mise en réseau du panneau de la machine, pas votre machine.
OriginalL'auteur Mykola Gurov
J'ai juste marqué Mykola Gurov réponse parce que c'est la bonne "cause" de mon problème,
de toute façon je tiens également à ajouter la solution que j'ai mis en place pour travailler autour de cette cause, pour le suivi de pourpose.
J'ai modifié le fichier config/boot.rb par l'ajout de l'option par défaut:
Si vous ne voulez pas modifier config/boot.rb, une autre solution pourrait être de forcer Dockerfile de lier 0.0.0.0 hôte comme un point d'entrée/paramètre CMD:
OriginalL'auteur Luca G. Soave