2017-11-27 110 views
9

Próbuję udostępnić maszynę dokowy w moim systemie Windows za pomocą nazwy hosta. Po utworzeniu go jakUdostępniaj maszynę dokowa pod nazwą hosta w systemie Windows

docker-machine create -d virtualbox mymachine 

i utworzenie kontenera Döcker że naraża port 80, jak mogę dać tej maszynie Döcker nazwę hosta tak, że mogę wejść „http://mymachine/” w przeglądarce, aby załadować stronę internetową? Kiedy zmieniam "mymachine" na aktualny adres IP, to działa.

Istnieje answer dla tego question, ale chciałbym osiągnąć to bez wpisu w pliku hosts. Czy to jest możliwe?

+0

Dlaczego nie chcesz używać pliku 'hosts'? Jakiego rodzaju rozwiązania oczekujesz? –

+0

Staram się, aby było to jak najprostsze dla wielu programistów pracujących w środowisku programistycznym. Chciałbym więc unikać ręcznych kroków. –

+0

I o ile mi wiadomo, adres IP maszyny dokującej może się zmienić np. podczas ponownego uruchamiania. –

Odpowiedz

4

Jeśli Twoim celem jest zachowanie jak największej prostoty dla wielu programistów, najlepiej będzie, gdy wybierzesz localhost. Tak długo, jak eksponowane i publikowane porty są dostępne na hoście, możesz po prostu użyć http://localhost w przeglądarce. Jeśli jest to port inny niż 80/443, po prostu dodaj go jako http://localhost:8080.

Jeśli naprawdę nie chcesz jechać trasą /etc/hosts lub localhost, możesz również kupić domenę i wyznaczyć trasę do numeru 127.0.0.1. Ten article podaje trochę więcej szczegółów.

Przykład:

dave-mbp:~ dave$ traceroute yoogle.com 
traceroute to yoogle.com (127.0.0.1), 64 hops max, 52 byte packets 
1 localhost (127.0.0.1) 0.742 ms 0.056 ms 0.046 ms 

Alternatywnie, jeśli nie chcesz kupić własną domenę i wszyscy deweloperzy są w tej samej sieci i jesteś w stanie kontrolować DHCP/DNS, można skonfigurować własny serwer DNS serwer do włączenia trasy prywatnej z powrotem do 127.0.0.1. Podobne pojęcie do opcji publicznego DNS, ale trochę bardziej kruche, ponieważ możesz pozwolić swoim programistom działać zdalnie, poza kontrolowaną siecią.

+0

Używanie 'localhost' jest opcją Jak mogę odwzorować wirtualne okna dokowania VM na localhost? Czy istnieje automatyczny sposób określając go w komendzie 'docker-machine'? –

+0

Z' '' docker-machine''' wierzę, że będziesz musiał wejść w interakcję z VirtualBox. hange w ustawieniach do mapowania portu hosta na port VM. Twoi deweloperzy powinni po prostu uruchomić polecenie VBoxManage po zainstalowaniu Dockera. Zobacz ten [komentarz] (https://stackoverflow.com/a/36286446/4108883), aby poznać szczegóły. – DJO3

3

Połączenie za pomocą nazwy hosta wymaga przejścia przez nazwę hosta do rozdzielczości IP. To jest obsługiwane przez plik hosts i wraca do DNS. Wszystko to dzieje się zanim dotkniesz kontenera dokera, a sama maszyna dokowa nie ma żadnych zewnętrznych haczyków, aby wyjść i skonfigurować plik hosts lub serwery DNS.

Dzięki nowszym wersjom Docker w oknach uruchamiane są kontenery z HyperV, a sieci automatycznie mapują porty do localhost, dzięki czemu można połączyć się z http://localhost. Nie zadziała to w przypadku maszyny-dokera, ponieważ wiruje maszyny wirtualne Virtualbox bez mapowania localhost.

Jeśli nie chcesz konfigurować pliku hosts, DNS i nie możesz użyć nowszej wersji okna dokowanego, pozostaje połączenie z IP. Możesz skorzystać z bezpłatnej usługi DNS typu wildcard, takiej jak http://xip.io/, która odwzorowuje dowolną nazwę, wraz z adresem IP, z powrotem na ten sam adres IP. Pozwala to na użycie odwrotnego proxy na podstawie nazwy hosta, aby połączyć się z wieloma kontenerami wewnątrz dockera za tym samym portem.

Ostatnia opcja to uruchomienie maszyny wirtualnej hosta w doku ze statycznym adresem IP. Docker-machine doesn't support this directly yet, więc możesz polegać na szczęściu, aby zachować ten sam adres IP z danego zakresu lub użyć innego narzędzia, takiego jak Vagrant, aby obrócić maszynę wirtualną hosta dokera ze statycznym adresem IP na laptopie. Po statycznym adresie IP możesz zmodyfikować plik hosta raz, utworzyć wpis DNS dla każdego dewelopera lub użyć tego samego adresu URL xip.io, aby za każdym razem uzyskać dostęp do kontenerów.

1
  • Można dodać wpis nazwy domeny w hosts file:

    X.X.X.X mymachine # Replace X.X.X.X by the IP of your docker machine 
    
  • Można również skonfigurować serwer DNS w sieci lokalnej, czy aplikacja ma być dostępny od swoich współpracowników w Twoje miejsce pracy i jeśli twoja maszyna Windows ma pozostać jako serwer.

    wymagałoby to udostępnienia Twojej maszyny wirtualnej z sieci lokalnej, ale może to być proste rozwiązanie, jeśli twoja aplikacja jest jedyną usługą sieciową działającą na hoście z systemem Windows. (Zauważ, że równie dobrze możesz skonfigurować serwer linuxowy, aby uniknąć używania maszyny dokujacej w oknach, ale nadal musisz ustawić statyczny adres IP dla tego serwera, aby upewnić się, że działa funkcja rozpoznawania nazw domen).

  • Możesz również kupić własną nazwę domeny (lub otrzymać bezpłatną) i przypisać jej adres IP urządzenia dokujacego, jeśli nie masz uprawnień do zapisu w pliku hosts.

Ale to rozwiązanie nie może już pracować po pewnym czasie, jeśli aplikacja hosta nie posiada static IP a jeśli zmiany IP doker automatyczna). Nieutworzenie statycznego adresu IP nie oznacza, że ​​zmieni się automatycznie, ale jeśli nie wymazujesz komputera, aby utworzyć nowy, nie powinno być pewności, ale nie będzie to zagwarantowane.

Należy również pamiętać, że jeśli skonfigurujesz serwer DNS, będziesz musiał go również obsługiwać na urządzeniu ze statycznym adresem IP. Twoi współpracownicy musieliby wtedy skonfigurować swoją maszynę, aby mogła korzystać z tej.

7

Możesz chcieć odnieść się do dokowanym dokumentowania zgrzewów: https://docs.docker.com/engine/userguide/networking/#exposing-and-publishing-ports

narazić portów za pomocą słowa kluczowego narazić na Dockerfile lub --expose flagę dokowanym bieg. Wystawianie portów jest sposobem dokumentowania, które porty są używane, ale w rzeczywistości nie mapuje ani nie otwiera żadnych portów. Wystawianie portów jest opcjonalne.

Opublikujesz porty za pomocą opcji --publish lub --publish-all do uruchomienia dokowania . To mówi Dockerowi, które porty otworzyć w interfejsie sieci kontenera . Po opublikowaniu portu jest on mapowany do dostępnego na wyższym poziomie portu (wyższego niż 30000) na komputerze hosta, chyba że użytkownik określi port do odwzorowania na maszynie hosta w środowisku wykonawczym. Nie można określić portu do mapowania na komputerze hosta podczas tworzenia obrazu (w pliku Dockerfile), ponieważ nie ma możliwości zagwarantowania, że ​​ten port będzie dostępny na hoście, na którym jest uruchomiony obraz .

Proponuję także przeglądając flagę -P gdyż różni się od -p jeden.

Sugeruję również wypróbowanie "Kitematic" dla Windows lub Mac, https://kitematic.com/. Jest to o wiele prostsze (ale nie zapomnij o zatwierdzeniu po jakichkolwiek zmianach!)

Co do sieci w Twojej firmie, nie ma to nic wspólnego z dokowaniem, o ile używasz lokalnie lokacji na komputerze, nie ma znaczenia co konfiguracja zestaw firmy.Nawet jeśli nie musisz zmieniać żadnej konfiguracji sieci VM, aby ujawnić rzeczy na lokalnym hoście, wszystko jest domyślnie używane, jeśli używasz Vbox (adapter 1 ==> NAT & adapter 2 ==> tylko host)

mam nadzieję, że właśnie tego szukasz

+0

A w jaki sposób pomaga to osiągnąć mój automat dokowy przez nazwę hosta? –

+0

Kontener dokowania musi zostać zmapowany do lokalnego hosta, aby można było uzyskać do niego dostęp za pośrednictwem przeglądarki internetowej.nie może działać w żaden inny sposób, ale tylko wtedy, gdy zreplikujesz adres adaptera i przypisujesz go do trybu ** bridge **, aby mógł łączyć się bezpośrednio z siecią fizyczną z własnym adresem IP , a następnie uzyskać do niego dostęp, wpisując jego adres IP w przeglądarce zamiast 'localhost' + jeśli chcesz wpisać nazwę zamiast adresu IP w przeglądarce, to jest inna historia i musisz sfałszować nazwę dla tego IP używając' unbound DNS' lub 'dnsmasq' etc .. –

0

Proponuję nginx-proxy. Właśnie tego używam cały czas. Jest szczególnie przydatny, gdy uruchamiasz różne pojemniki, które powinny odpowiadać na ten sam port (na przykład wiele usług internetowych).

nginx-proxy działa oddzielnie od usługi i nasłuchuje zdarzeń dockera, aby zaktualizować własną konfigurację. Po odłożeniu usługi i sprawdzeniu, czy port nginx-proxy nasłuchuje, nastąpi przekierowanie do usługi. Dlatego musisz albo uruchomić nginx-proxy z flagą DEFAULT_HOST, albo wysłać żądany host jako parametr nagłówka z żądaniem.

Ponieważ uruchamiam to tylko z prostym dokiem, nie wiem, czy działa z dokiem-maszyną.

1

Jeśli korzystasz z komputera z multieming DNS (to jest Bonjour na Macu), to podejście, które zadziałało, polega na uruchomieniu an Avahi container w Vbox Docker Machine. To pozwala mi odnieść się do usług VM pod numerem <docker-machine-vm-name>.local. Bez edycji /etc/hosts, bez szalonych ustawień sieciowych.

używam innego VM VirtualBox dla różnych projektów dla mojej pracy, który utrzymuje piękny separacji obawy (zapobiega kolizjom portów, pozwala mi zdmuchnąć wszystkie pojemniki i obrazów bez wpływu na inne moje projekty, itd.)

Korzystanie docker-compose, ja po prostu umieścić instancję avahi na górze każdego projektu:

version: '2' 
services: 
    avahi: 
     image: 'enernoclabs/avahi:latest' 
     network_mode: 'host' 

Następnie, jeśli mogę uruchomić serwer WWW w VM ze spedycji pojemnika doker do portu 80, to tylko http://machine-name.local w przeglądarce.

Powiązane problemy