Ich versuche, eine automatisierte Testplattform mit Docker und Selenium Grid einzurichten. Im folgenden Diagramm sehen Sie die Struktur, die ich verwende. Oben ist der Ubuntu-Server, der auf Compute Engine läuft. Auf der linken Seite befindet sich ein Andock-Container, der ubuntu 14.04 ausführt. Der Container führt unser Projekt auf localhost: 8080 mit Google App Engine aus. Auf der rechten Seite ist der Selenium Hub mit zwei Knoten auf Port 4444.
Dies ist die Ausgabe beim Ausführen von docker ps:
%Vor%Wie Sie sehen können, haben sowohl der Hub als auch der Ubuntu-Container Ports aktiviert und werden vom Ubuntu-Host weitergeleitet, auf dem die Andock-Container ausgeführt werden. Ich habe diese Ports in Google Compute Engine geöffnet.
Im Andock-Container wird mein Projekt lokal mit Google App Engine sdk ausgeführt. Nach der Verwendung von docker exec -it drunk_kalam bash
aktiviere ich den App Engine-Server. Der Befehl wird innerhalb des Andock-Containers ausgeführt. In Zukunft wird dies Teil des Skripts sein, aber da dies noch in Arbeit ist, wird es aus dem Container heraus ausgeführt. Unten sehen Sie das laufende Projekt:
Das Problem ist, dass ich über den Port 8080 nicht auf das Projekt zugreifen kann. Ich habe den Port in meiner Docker-Datei offen gelegt und habe versucht, den Container mit dem Flag -P und dem Flag -p 8080 auszuführen. So:
%Vor%Ich habe den Selen-Hub mit genau demselben Befehl gestartet, und dieser Port ist zugänglich. Wenn der folgende Befehl ausgeführt wird:
%Vor%Ich bekomme folgende Ausgabe:
%Vor%Wenn ich nmap auf 8080 auf dem Docker-Container ausführe, auf dem das Projekt läuft, bekomme ich folgende Ausgabe:
%Vor% Ich glaube, das Problem liegt irgendwo in der Dockerdatei des Ubuntu-Containers. Unten sehen Sie die Dockerfile, die Dockerdatei aus dem offiziellen Ubuntu-Repository, mit der hinzugefügten EXPOSE 8080
-Zeile.
Der zum Freigeben des Ports verwendete Befehl entspricht dem Selenium Hub nur mit einer anderen Portnummer. Ich kann nicht herausfinden, warum dieser Hafen geschlossen bleibt. Jede Hilfe wäre willkommen.
Vielen Dank im Voraus
Tijn
Aus Ihrer Ausgabe: 0.0.0.0:32777->8080/tcp
. Das besagt, dass Port 32777, der alle Schnittstellen überwacht, mit Port 8080 innerhalb des Containers (mit NAT und Docker-Proxy) verknüpft wird. Daher müssen Sie auf Port 32777 statt auf 8080 zugreifen. Diese zufällige Portzuordnung erfolgt, wenn Sie einen Port freigeben und mit -P
teilen.
Wenn Sie einen bestimmten Port ohne zufälliges Mapping teilen möchten, können Sie ihn mit der Kleinbuchstaben p-Option definieren: -p 8080:8080
oder sogar -p 8888:8080
, um Port 8888 in Port 8080 des Containers zu mappen.
In der Chat-Sitzung stellte sich heraus, dass die Anwendung Loopback im Container abhörte. Mit netstat -lnt
zeigte es:
Das Aktualisieren der Anwendung, um an 0.0.0.0 zu binden, erlaubte der Portweiterleitung, wie erwartet zu funktionieren.