2016-07-28 34 views
1

ich einen einfachen Docker Container zu machen versuche, die die Rails-Anwendung aus dem Verzeichnis ausgeführt wird, dass ich es starten in.Rails-Anwendung Docker Behälter nicht zugänglich von Windows-Host

Alles scheint außer in Ordnung zu sein, wenn ich den Behälter laufen und versuche, von meinem Windows-Host aus auf die IP-Adresse zuzugreifen, die der Docker-Computer mir gibt, antwortet er mit einer Verbindung abgewiesener Fehlermeldung.

Ich habe sogar die Nginx Dockerfile als Referenz verwendet, weil die Nginx Dockerfile tatsächlich einen Container erstellt, der für mich zugänglich ist.

Hier ist meine Dockerfile so weit:

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 

Ich baue das Bild mit diesem Befehl

docker build -t rails_server . 

ich es dann diesen Befehl

docker run -d -p 80:80 rails_server 

Und hier, was mit laufen ist Ich versuche, auf die Webseite zuzugreifen:

curl $(docker-machine ip) 

Und das ist, was ich zurück:

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

Und so macht es mir das Gefühl:

enter image description here

Antwort

2

Das Problem scheint zu sein, dass der App auf zuhört 127.0.0.1:80, so dass der Dienst keine Verbindung von außerhalb des Containers akzeptiert. Könnten Sie überprüfen, ob das Ändern des Rails-Servers auf 0.0.0.0 das Problem löst?

können Sie tun, dass die -b Flagge von rails s mit:

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

Ehrfürchtig, das funktioniert. Aber ich verstehe nicht ganz warum. Zum Beispiel, wenn ich mehr Rails-Entwicklung gemacht habe, konnte ich eine App wie gewohnt starten und meine Mitarbeiter konnten sie von ihren Maschinen aus über meine LAN-IP (192.168.xxx.xxx) erreichen. Ich habe das Gefühl, dass ich von meinem Host eine Verbindung mit meiner Docker-VM herstellen kann, genauso wie ein anderer Computer sich mit mir im LAN verbinden kann. – arjabbar

0

Der Hafen nur auf die vm laufen die Docker innen ausgesetzt ist. Sie müssen Port 80 Ihres VM weiterhin Ihrem lokalen Computer zur Verfügung stellen, damit es eine Verbindung zu ihm herstellen kann. Ich denke, der beste Ansatz ist, Ihren Container auf einen optionalen Port wie 7070 zu horchen und dann einen einfachen Nginx-Proxy-Pass zu verwenden, um den Inhalt nach draußen zu leiten (Überwachung von Port 80)