2015-09-23 12 views
14

Muszę zmapować porty hosta do portów w kontenerze. Mogę to osiągnąć, uruchamiając polecenie "docker run" za pomocą opcji -p. Jak mogę to osiągnąć poprzez Dockerfile? stosując następujące daje "deprecated error"Jak publikować porty w plikach dokowania

EXPOSE 80:8080 

Jak jeszcze mogę zrobić odsłonięte portów publicznych przez teh dockerfile?

Odpowiedz

14

Nie możesz. Jakie porty są publikowane na hoście dokera, to decyzja, którą powinien podjąć lokalny administrator, a nie obraz, który próbują uruchomić; byłby to (a) problem z bezpieczeństwem (hej, właśnie otworzyłem dostęp ssh do twojego systemu!) i (b) skłonny do awarii (mój kontener serwera WWW nie może powiązać portu 80, ponieważ już uruchomiłem serwer port 80).

Jeśli chcesz uniknąć długich linii poleceń docker run, rozważ użycie funkcji podobnej do docker-compose, aby zautomatyzować proces. Następnie można przejść doker-komponować konfigurację takiego:

mywebserver: 
    image: myname/mywebserver 
    ports: 
    - 80:8080 

a następnie prosty docker-compose up rozpocznie swój pojemnik z portu kontenerowego 8080 związany z gospodarzem porcie 80.

Aktualizacja 11.03.2017

W odpowiedzi na komentarz Willi za:

  • Korzystanie docker-compose nie będzie h elp z problemem kolizji portów. Problem kolizji portów jest powodem, dla którego obrazy nie powinny być w stanie określić powiązań portów hosta. Po prostu oferowałem docker-compose jako alternatywę dla długich linii poleceń docker run z wieloma powiązaniami portów. Problem kolizji portów potencjalnie umożliwiłby kontenerowi przeprowadzenie ataku polegającego na odmowie usługi na twoim hoście: jeśli na przykład kontener zaczyna się i łączy się z portem 80 przed serwerem Apache na twoim hoście (lub w innym kontenerze), właśnie straciłeś swoją usługę internetową.

  • Jeśli chodzi o kwestię bezpieczeństwa: jeśli obraz byłby w stanie określić powiązania portu hosta, kontener mógłby otworzyć dostęp do kontenera bez Twojej wiedzy. Zezwolenie użytkownikowi zdalnemu na dostęp do kontenera na twoim hoście otwiera cię na możliwość kompromisu hosta w przypadku, gdy funkcje przestrzeni nazw w kernelu nie całkowicie izolują kontener, a nawet jeśli całkowicie ufasz izolacji, to otwiera cię ona do potencjalnych problemów prawnych, jeśli pojemnik ten jest wykorzystywany do nielegalnych celów. W obu przypadkach jest to zły pomysł.

+0

Dzięki! to pomaga –

+0

Jak jednak używać funkcji dokowania do rozwiązywania problemów związanych z kolizją portów? Poza tym możesz wyjaśnić nieco problem bezpieczeństwa? – Willa

10

Jest różnica między wystawiać i publikować.

Expose oznacza otwarcie portu po stronie kontenera, opublikowanie oznacza otwarcie go na hoście Docker na zewnątrz.

Na przykład, jeśli polecenie prowadzenia dokiem było -p 80: 8080, to wystawia port 8080 na kontenerze i porcie publikowania 80 na hoście.

Naprawdę można tylko eksponować porty w pliku Docker, jeśli chcesz elastycznie publikować porty, musisz użyć opcji -p opting with docker run.

Powiązane problemy