Gewusst wie: veröffentlichen von ports im Andockfenster-Dateien
Ich brauche die Zuordnung der ports auf dem host, um die ports auf dem Behälter. Ich kann erreichen Sie dies, indem Sie die "docker run"
- Befehl mit der -p
option. Wie kann ich erreichen, das durch die Dockerfile
?
Anhand der folgenden gibt ein "deprecated error"
EXPOSE 80:8080
Wie kann ich sonst noch machen, die freiliegenden Anschlüsse der öffentlichkeit durch teh dockerfile?
InformationsquelleAutor user_mda | 2015-09-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht. Welche ports sind veröffentlicht auf den docker-host ist ausschließlich eine Entscheidung, die gemacht werden sollte, die durch den lokalen administrator, nicht durch die Bild, die Sie versuchen zu laufen; das wäre (a) ein Sicherheits-problem (hey, ich habe gerade eröffnet ssh-Zugang zu deinem system!) und (b) fehleranfällig (mein webserver-container kann nicht gebunden werden, auf port 80, da ich bereits einen server auf port 80).
Wenn Sie vermeiden wollen lange
docker run
Befehl Linien, verwenden Sie so etwas wie docker-Komponieren um den Prozess zu automatisieren. Sie können dann passieren docker-verfassen einer Konfiguration wie:Und dann eine einfache
docker-compose up
starten Sie Ihren container mit container port 8080 gebunden-host-port 80.Update 2017-03-11
In Reaktion auf Willa ' s Kommentar:
Mit
docker-compose
wird nicht helfen, mit der port-Kollision Problem. Die port-Kollision-Problem ist ein Grund, warum die Bilder sollten nicht in der Lage, geben Sie die host-port-Bindungen. Ich war einfach anbietendocker-compose
als alternative zu langendocker run
Befehl Linien mit mehreren port-Bindungen. Die port-Kollision Problem würde möglicherweise erlauben, einen Behälter zum durchführen einer denial-of-service-Angriff auf den host: wenn, zum Beispiel, ein container-fängt und bindet sich an port 80, bevor Sie einen Apache-server auf Ihrem Rechner (oder einem anderen container), dann haben Sie gerade verloren Ihrem web-service.In Bezug auf die Frage der Sicherheit: Wenn ein Bild in der Lage waren, zu geben-host-port-Bindungen, es wäre möglich, Behälter zu öffnen, Zugriff auf den container ohne Ihr wissen. Ermöglicht ein remote-Benutzer zum Zugriff auf einen container auf Ihrem Rechner, öffnet Sie für die Möglichkeit eines host-Kompromiss in dem Fall, dass der namespace Funktionen in den kernel nicht vollständig isolieren der container, und selbst wenn Sie vollständig Vertrauen die isolation, es öffnet Sie, um mögliche rechtliche Probleme, wenn dieser container wird verwendet für illegale Zwecke. In jedem Fall ist es eine schlechte Idee.
Wie ist mit docker-verfassen Sie lösen das Potenzial für eine port-Kollision obwohl? Außerdem können Sie erläutern, ein wenig über die Frage der Sicherheit?
InformationsquelleAutor larsks
Gibt es einen Unterschied zwischen aussetzen und veröffentlichen.
Setzen bedeutet, den port zu öffnen, auf der container-Seite veröffentlichen, bedeutet, sich zu öffnen, es auf den Docker-host zu der Außenwelt.
Zum Beispiel, wenn Ihre docker run-Befehl hatte -p 80:8080, es auszusetzen port 8080 auf den container und veröffentlichen Sie port 80 auf dem host.
Können Sie nur wirklich aussetzen ports im Dockerfile, wenn Sie wollen, dass die Flexibilität zu veröffentlichen, die ports, die Sie verwenden müssen die-p-Entscheidung mit docker run.
InformationsquelleAutor Michael
Was Sie tun können, ist zu
EXPOSE
eine Liste von ports auf IhremDockerfile
und später führen Sie den Befehldocker run -P your_app
zu veröffentlichen, alle ports auf dem DockerfileInformationsquelleAutor Fabián Bertetto