Zgodnie z dokumentacją pliku Docker Compose :
depends_on
- Wyraźna zależność między usługami.links
- Łącz do kontenerów w innej usłudze, a także wyrażaj zależność między usługami w taki sam sposób, jak depend_on .
Nie rozumiem celu łączenia z innymi kontenerami, więc różnica między dwiema opcjami wciąż wydaje mi się dość trudna.
Byłoby o wiele łatwiej, gdyby istniał przykład, ale nie mogę go znaleźć.
Zauważyłem, że kiedy połączę pojemnik B z pojemnikiem A, wówczas pojemnik B będzie „możliwy do pingowania” w powłoce pojemnika A.
Wbiegłem ping B
do kontenera A bash
i uzyskałem taki wynik (tylko w celach informacyjnych, obraz z Internetu)
docker
docker-compose
dockerfile
itsjef
źródło
źródło
--link
Flaga jest obecnie przestarzała funkcja spuścizna Döcker i dokumentacja sugeruje „To może ostatecznie zostać usunięte” Docker: Legacy linki kontenerów . Zaleca się, aby nie używać funkcji sieci Docker ani metody komponowania dokera . Uznałem, że byłoby to pomocne dla każdego, kto dowie się o tej funkcji.Odpowiedzi:
Wpis wymaga aktualizacji po
links
wycofaniu opcji.Zasadniczo
links
nie jest już potrzebny, ponieważ jego główny cel - udostępnienie kontenera innym przez dodanie zmiennej środowiskowej - jest domyślnie dołączony donetwork
. Gdy kontenery są umieszczone w tej samej sieci, są one dostępne dla siebie nawzajem, używając nazwy kontenera i innego aliasu jako hosta.Na
docker run
,--link
jest również przestarzała i powinna zostać zastąpiona przez sieć niestandardowej.depends_on
wyraża kolejność początkową (i domyślnie kolejność ciągnięcia obrazu), co było dobrym efektem ubocznymlinks
.źródło
Ta odpowiedź dotyczy wersji 2 dokera i działa również w wersji 3
Nadal możesz uzyskać dostęp do danych, gdy używasz zależy_on.
Jeśli spojrzysz na dokery Docker Compose i Django , nadal możesz uzyskać dostęp do bazy danych w następujący sposób:
Jaka jest różnica między linkami i zależy od opcji?
spinki do mankietów:
Podczas tworzenia kontenera dla bazy danych, na przykład:
I możesz znaleźć
Oznacza to, że możesz podłączyć bazę danych z lokalnego portu hosta 32777 (3306 w kontenerze), ale ten port będzie się zmieniać za każdym razem, gdy ponownie uruchomisz lub usuniesz kontener. Możesz więc użyć łączy, aby mieć pewność, że zawsze będziesz się łączyć z bazą danych i nie musisz wiedzieć, który to port.
zależy od:
Znalazłem fajnego bloga od Giorgio Ferraris Docker-compose.yml: od V1 do V2
I
Aktualizacja
zależy od
Wyraźna zależność między usługami, która ma dwa efekty:
docker-compose up
uruchomi usługi w kolejności zależności. W poniższym przykładzie db i redis zostaną uruchomione przed uruchomieniem sieci.docker-compose up SERVICE
automatycznie uwzględni zależności SERVICE. W poniższym przykładzie web-docker-compose up również utworzy i uruchomi db i redis.Prosty przykład:
źródło
https://docs.docker.com/compose/compose-file/compose-versioning/
docker run
tu przykład jest zupełnie nieistotny, i tak nie będzie można uruchomić kontenera. czego mi brakuje?docker run
przykład chce wskazać, dlaczego musimy użyć depend_on lub linków zamiast twardego kodu numeru portu. Po prostu dlatego, że jeśli go nie określisz, zmieni się za każdym razem. Myślę, że to pozwoli ludziom zrozumieć więcej na temat depend_on lub linków.[Aktualizacja września 2016 r.]: Ta odpowiedź była przeznaczona dla skomponowanego pliku dokera v1 (jak pokazano w przykładowym pliku do komponowania poniżej). W przypadku wersji 2 zobacz inną odpowiedź autorstwa @Windsooon.
[Oryginalna odpowiedź]:
Jest to dość jasne w dokumentacji.
depends_on
decyduje o zależności i kolejności tworzenia kontenerów, i tolinks
nie tylko, ale takżeNa przykład zakładając następujący
docker-compose.yml
plik:Dzięki
links
kodowi wewnątrzweb
będzie można uzyskać dostęp do bazy danych przy użyciudb:5432
, zakładając, że port 5432 jest widoczny nadb
obrazie. Gdybydepends_on
zostały użyte, nie byłoby to możliwe, ale kolejność uruchamiania kontenerów byłaby prawidłowa.źródło
links
czydepends_on
też jedno z nich jest w porządku? Moje obecnedocker-compose.yml
zastosowaniadepends_on
i rzeczy wydają się działać dobrze. :)name:port
wtedydepends_on
jest w porządku.db
zaweb
pomocą nazwy hosta baz danych.