2015-04-10 22 views
9

Z mojego rozumienia docker compose/fig, tworzenie połączenia między dwiema usługami/obrazami jest jednym z głównych powodów, jeśli nie chcesz udostępniać portów innym.Zrozumienie portów i łączy w dockeru komponowanie

jak tutaj db nie wystawiać żadnych portów i jest związany tylko:

web: 
    build: . 
    links: 
    - db 
    ports: 
    - "8000:8000" 
db: 
    image: postgres 

Czy internetowej myśli db działa na jego localhost? Czy połączyłem się ze skryptu/programu w web na localhost: 5432 (standardowy port z postgresql), aby uzyskać połączenie z bazą danych?

A jeśli to prawda, jak zmienić port 5432 na 6432, bez narażania? czy po prostu uruchomić PostgreSQL na innym porcie?

Aktualizacja:

Przydatne linki po pewnym wejścia:

http://docs.docker.com/userguide/dockerlinks/

https://docs.docker.com/compose/yml/#links

Odpowiedz

3

internetowej myśli, db działa na przyjmującego wskazywanego przez env zmiennej DOCKER_DB czy coś tak. Twoje usługi powinny wskazywać tę zmienną (host), a nie localhost.

Kontener db eksponuje porty (poprzez EXPOSE) do połączonych kontenerów, ponownie w zmiennych. Możesz uruchomić bazę danych na dowolnym porcie, pod warunkiem, że jest EXPOSEd.

9

docker-compose/fig to głównie koń pociągowy do uruchamiania/zarządzania wieloma obrazami naraz, które są w pewnym stopniu zależne od siebie.

Aby w pełni zrozumieć linki pomiędzy pojemników należy wiedzieć, że istnieje wpis gospodarza tworzony, zwykle wewnątrz /etc/hosts pliku, który odwzorowuje nazwę hosta wewnątrz tego kontenera doker zarządzana sieć do konkretnego adresu IP. Więc jeśli chcesz uzyskać dostęp do postgres db musisz wskazać nazwę hosta db zamiast localhost.

Jeśli chodzi o odsłonięte porty, większość zdjęć ma już wyeksponowane niektóre porty, więc może się zdarzyć, że po prostu użyjesz obrazu, a port zostanie odsłonięty, zawsze możesz go zastąpić czymś innym.

Update w Döcker Skomponuj 1.6.0+

Domyślnie Compose konfiguruje pojedynczą sieć dla swojej aplikacji. Każdy kontener dla usługi łączy się z domyślną siecią i jest dostępny dla innych kontenerów w tej sieci, a także dla nich wykrywalny na nazwę hosta identyczną z nazwą kontenera. source

Można zdefiniować powiązania między pojemnikami tylko wtedy, gdy chcesz zdefiniować alias do pojemnika, tak jak poniżej:

version: '2' 
services: 
    web: 
    build: . 
    links: 
     - "db:database" 
    db: 
    image: postgres