2016-08-05 33 views
1

Ich verwende Docker unter Windows (nicht die native Version, d. H. Die, die auf einer VM läuft über docker-machine).Wie weisen Sie Docker-Containern Hostnamen zu?

Zur Zeit habe ich die Zugriff auf Websites wie so:

192.168.99.100:8080 for website 1 

192.168.99.100:8081 for website 2 

192.168.99.100:8082 for website 3 

Dies ist ein echten Schmerzen aus offensichtlichen Gründen.

Ich möchte in der Lage sein, es so zu tun, wie ich es mit Apache Virtual Hosts gemacht habe, wo ich die hosts Datei modifiziere und dann stattdessen einfach etwas eingeben kann: website1.dev.

Wie kann ich dies für Docker Container tun?

Meine erste Lösung wurde einfach die folgenden auf die Hosts-Dateien auf meinem Windows-Rechner anhängen wie so:

192.168.99.100 docker.dev 

jedoch docker.dev wird lediglich auf 192.168.99.100:80 (dh Website 1), aufgrund der Tatsache, können Sie‘ t Stellen Sie Ports in der hosts-Datei ein.

+2

Sie können einen Nginx-Container und Reverse-Proxy für diesen Container ausführen, wenn ein Docker-Container erstellt wird. – ganesshkumar

+0

Können Sie bitte ein Beispiel mit Code zeigen, da ich keine Ahnung habe, was Sie meinen. –

+1

Dieser Artikel enthält die Grundlagen, um mit http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/ zu beginnen. Weitere Informationen finden Sie in den offiziellen Github-Dokumenten von nginx-proxy, https://github.com/jwilder/nginx-proxy – ganesshkumar

Antwort

2

192.168.99.100 ist die IP eines Docker-Rechners: Um dieser IP einen Namen zu geben, müssten Sie die Windows hosts file selbst ändern.

Und das setzt voraus, dass die IP der Dockermaschine VM repariert wurde: siehe my script at this answer.

Um tatsächlich auf der rechten Seite Apache-Server innerhalb der VM zu umleiten, müssen Sie einen anderen Behälter, der wird:

  • Port abgehört 80 standardmäßig
  • die URL und Proxy-Pass analysieren (Redirect) zu die richtige tatsächliche URL: Port.

    http://website1.dev => redirect to port 8080 
    http://website2.dev => redirect to port 8081 
    http://website3.dev => redirect to port 8082 
    

(mit website1.dev, website2.dev und website3.dev alle hinzugefügt auf der Windows-Hosts-Datei, mit der gleichen URL 192.168.99.100)

Zum Beispiel überprüft traefik


Diese unterscheidet sich vom Hostnamen eines Containers, wie er von anderen Containern gesehen wird.

docker-compose extra-host ist in der Tat entspricht docker run --add-host

Aber ein docker-compose can use hostname: directly einen Hostnamen zu einem Behälter zu fixieren.
Das sollte genug sein, um jeden Container nach seinem Namen zu referenzieren.

+0

Können Sie mir ein Beispiel zeigen? Ich bin gerade bei Docs verwirrt. –

+0

@YahyaUddin Eigentlich habe ich meine Antwort geändert: Zuweisung eines Namens zu einer IP ist ein Windows-Hosts Einstellung, kein Docker oder Docker-komponieren. Der Hostname in docker-compose dient zum Zuweisen von Namen zum Container innerhalb des Linux-Docker-Hosts. Aber wieder, 192.168.99.100 ist die IP vom tatsächlichen Windows-Host aus gesehen. Kein Docker da (da Docker in der 192.168.99.100 VM ist) – VonC

+0

Ich habe '192.168.99.100' bereits einem Domain-Namen zugewiesen, d. H.' Docker.dev'. Dies hilft jedoch in diesem Fall nicht, da nur auf 192.168.99.100: 80 weitergeleitet wird. Es wird nicht mit anderen Websites helfen. Ich habe meine Frage aktualisiert. –