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:
version: '2'
services:
db:
image: postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
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:
docker run -d --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" -P mysql
docker inspect d54cf8a0fb98 |grep HostPort
I możesz znaleźć
"HostPort": "32777"
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.
web:
links:
- db
zależy od:
Znalazłem fajnego bloga od Giorgio Ferraris Docker-compose.yml: od V1 do V2
Kiedy docker-compose wykonuje pliki V2, automatycznie buduje sieć między wszystkimi kontenerami zdefiniowanymi w pliku, a każdy kontener będzie mógł natychmiast odwoływać się do innych tylko przy użyciu nazw zdefiniowanych w pliku docker-compose.yml.
I
Więc nie potrzebujemy już linków; linki zostały użyte do rozpoczęcia komunikacji sieciowej między naszym kontenerem db a kontenerem serwera WWW, ale jest to już zrobione przez docker-compose
Aktualizacja
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:
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
Uwaga: depend_on nie będzie czekał, aż db i redis będą „gotowe” przed uruchomieniem sieci - tylko do momentu ich uruchomienia. Jeśli musisz poczekać na gotowość usługi, zobacz Kontrolowanie kolejności uruchamiania, aby uzyskać więcej informacji na temat tego problemu i strategii jego rozwiązywania.
--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.