Questa risposta è per docker-compose versione 2 e funziona anche con la versione 3
Puoi ancora accedere ai dati quando usi depend_on.
Se dai un'occhiata ai documenti docker Docker Compose e Django , puoi comunque accedere al database in questo modo:
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
Qual'è la differenza tra links e depend_on?
links:
Quando si crea un contenitore per un database, ad esempio:
docker run -d --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" -P mysql
docker inspect d54cf8a0fb98 |grep HostPort
E potresti trovare
"HostPort": "32777"
Ciò significa che è possibile connettere il database dalla porta 32777 localhost (3306 nel contenitore) ma questa porta cambierà ogni volta che si riavvia o si rimuove il contenitore. Quindi puoi usare i collegamenti per assicurarti di connetterti sempre al database e non devi sapere quale sia la porta.
web:
links:
- db
dipende da:
Ho trovato un bel blog di Giorgio Ferraris Docker-compose.yml: dalla V1 alla V2
Quando docker-compose esegue i file V2, creerà automaticamente una rete tra tutti i contenitori definiti nel file e ogni contenitore sarà immediatamente in grado di fare riferimento agli altri semplicemente usando i nomi definiti nel file docker-compose.yml.
E
Quindi non abbiamo più bisogno di collegamenti; i collegamenti sono stati usati per avviare una comunicazione di rete tra il nostro contenitore db e il nostro contenitore web-server, ma questo è già fatto da docker-compose
Aggiornare
Esprimi la dipendenza tra i servizi, che ha due effetti:
docker-compose up
avvierà i servizi in ordine di dipendenza. Nel seguente esempio, db e redis verranno avviati prima del web.
docker-compose up SERVICE
includerà automaticamente le dipendenze di SERVICE. Nel seguente esempio, la finestra mobile composta da Web creerà e avvierà anche db e redis.
Esempio semplice:
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
Nota: depend_on non attenderà che db e redis siano “pronti” prima di avviare il web - solo fino a quando non saranno stati avviati. Se è necessario attendere che un servizio sia pronto, consultare Controllo dell'ordine di avvio per ulteriori informazioni su questo problema e sulle strategie per risolverlo.
--link
flag è ora una funzionalità legacy obsoleta di Docker e la documentazione suggerisce " Docker: collegamenti eventualmente rimovibili" . Si consiglia di non utilizzare la funzione Reti Docker o il metodo di composizione docker. Ho pensato che sarebbe stato utile a chiunque qui venisse a conoscenza di questa funzione.