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 das Selen-Hub mit zwei Knoten läuft auf Port 4444.Verfügbarmachen von Ports in Docker funktioniert nicht
Dies ist der Ausgang, wenn Docker ps ausgeführt wird:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f5ac6e3c8270 xxxxx/ubuntuport:14.04 "/bin/bash" 3 days ago Up 13 seconds 0.0.0.0:32777->8080/tcp drunk_kalam
4246ca0790db eu.gcr.io/xxxxxx/selenium-chrome "/bin/sh -c 'rm -rf /" 4 weeks ago Up 3 days evil_mahavira
8d06f90a1a84 eu.gcr.io/xxxxxx/selenium-firefox "/bin/sh -c 'rm -rf /" 4 weeks ago Up 3 days nauseous_torvalds
dc548f638778 eu.gcr.io/xxxxxx/selenium-hub "/opt/bin/entry_point" 4 weeks ago Up 3 days 0.0.0.0:32770->4444/tcp modest_khorana
Wie können Sie sowohl die Nabe sehen und die ubuntu Container haben 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 Docker Container Ich führe unser Projekt lokal mit Google App Engine sdk. 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. Weiter unten finden Sie das Projekt laufen zu sehen:
[email protected]:/# google_appengine/dev_appserver.py --php_executable_path=/usr/bin/php5-cgi --php_gae_extension_path=appengine-php-extension/modules/gae_runtime_module.so ./xxxxxxxxxxxxxxx/
INFO 2016-08-08 12:19:49,287 sdk_update_checker.py:229] Checking for updates to the SDK.
WARNING 2016-08-08 12:19:49,532 simple_search_stub.py:1146] Could not read search indexes from /tmp/appengine.xxxxxxxxxxx.root/search_indexes
INFO 2016-08-08 12:19:49,535 api_server.py:205] Starting API server at: http://localhost:39475
WARNING 2016-08-08 12:19:51,217 inotify_file_watcher.py:196] There are too many directories in your application for changes in all of them to be monitored. You may have to restart the development server to see some changes to your files.
INFO 2016-08-08 12:19:51,218 dispatcher.py:197] Starting module "default" running at: http://localhost:8080
INFO 2016-08-08 12:19:51,220 admin_server.py:116] Starting admin server at: http://localhost:8000
Das Problem ist, ich das Projekt nicht über den Port zugreifen kann 8080. ich den Port in meinem Dockerfile ausgesetzt habe, und ich habe versucht, mit der den Behälter läuft - P-Flag sowie das Flag -p 8080. Gefällt mir:
Ich habe den selen Hub mit genau dem gleichen Befehl gestartet, und dieser Port ist zugänglich. Wenn Sie den folgenden Befehl ausführen:
nmap -p 4444 172.17.0.3
ich folgende Ausgabe:
Nmap scan report for 172.17.0.3
Host is up (0.00010s latency).
PORT STATE SERVICE
4444/tcp open krb524
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
Als ich nmap auf 8080 auf dem Docker Container laufen bekommen, das Projekt läuft ich diese Ausgabe:
Nmap scan report for 172.17.0.2
Host is up (0.000085s latency).
PORT STATE SERVICE
8080/tcp closed http-proxy
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
Ich glaube, das Problem ist irgendwo in der Dockerfile des Ubuntu-Containers. Unten sehen Sie die Dockerfile, die Dockerdatei aus dem offiziellen Ubuntu-Repository, mit der hinzugefügten Zeile EXPOSE 8080
.
FROM scratch
ADD ubuntu-trusty-core-cloudimg-amd64-root.tar.gz/
EXPOSE 8080
# a few minor docker-specific tweaks
# see https://github.com/docker/docker/blob/9a9fc01af8fb5d98b8eec0740716226fadb3735c/contrib/mkimage/debootstrap
RUN set -xe \
\
&& echo '#!/bin/sh' > /usr/sbin/policy-rc.d \
&& echo 'exit 101' >> /usr/sbin/policy-rc.d \
&& chmod +x /usr/sbin/policy-rc.d \
\
&& dpkg-divert --local --rename --add /sbin/initctl \
&& cp -a /usr/sbin/policy-rc.d /sbin/initctl \
&& sed -i 's/^exit.*/exit 0/' /sbin/initctl \
\
&& echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \
\
&& echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \
&& echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \
&& echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \
\
&& echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \
\
&& echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes \
\
&& echo 'Apt::AutoRemove::SuggestsImportant "false";' > /etc/apt/apt.conf.d/docker-autoremove-suggests
RUN rm -rf /var/lib/apt/lists/*
RUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list
CMD ["/bin/bash"]
Der Befehl verwendet, um den Port zu belichten ist das gleiche wie die des 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
Ich kann auf den Port 32777 zugreifen. Das Mapping funktioniert jedoch nicht, da der 8080-Port geschlossen ist. Daher kann mein Ubuntu-Host nicht auf den Docker-Container zugreifen. Ich habe versucht, es auch auf nicht-zufällige Ports zuzuordnen, aber die Tatsache, dass der 8080-Port auf dem Andock-Container geschlossen bleibt, ändert sich nicht. – Tijn
Was sollte an Port 8080 abgehört werden? Von Ihrer PS-Ausgabe haben Sie bash gestartet. Die Shell selbst wird nicht auf Netzwerkverkehr warten. – BMitch
Im Docker-Container leite ich unsere Website lokal mit Google App Engine sdk. Dies ist auf Port 8080 aktiv. Und ich kann nicht darauf zugreifen, ohne dass es Port 8080 abgehört. Zur Verdeutlichung: Der Selenium-Hub soll Tests auf dem localhost des Docker-Containers ausführen. – Tijn