Esta resposta é para a versão 2 do docker-compose e também funciona na versão 3
Você ainda pode acessar os dados quando usar o Depend_on.
Se você olhar para o docker docs Docker Compose e Django , ainda poderá acessar o banco de dados assim:
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 é a diferença entre links e depende_on?
links:
Quando você cria um contêiner para um banco de dados, por exemplo:
docker run -d --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" -P mysql
docker inspect d54cf8a0fb98 |grep HostPort
E você pode encontrar
"HostPort": "32777"
Isso significa que você pode conectar o banco de dados a partir da porta 32777 do host local (3306 no contêiner), mas essa porta será alterada toda vez que você reiniciar ou remover o contêiner. Portanto, você pode usar links para garantir que você sempre se conecte ao banco de dados e não precise saber qual é a porta.
web:
links:
- db
depende de:
Encontrei um bom blog de Giorgio Ferraris Docker-compose.yml: de V1 a V2
Quando o docker-compose executa arquivos V2, ele cria automaticamente uma rede entre todos os contêineres definidos no arquivo e cada contêiner poderá imediatamente se referir aos outros apenas usando os nomes definidos no arquivo docker-compose.yml.
E
Portanto, não precisamos mais de links; Os links foram usados para iniciar uma comunicação de rede entre o contêiner db e o contêiner do servidor da web, mas isso já é feito pelo docker-compose
Atualizar
Expressar dependência entre serviços, que tem dois efeitos:
docker-compose up
iniciará os serviços em ordem de dependência. No exemplo a seguir, db e redis serão iniciados antes da web.
docker-compose up SERVICE
incluirá automaticamente as dependências do SERVIÇO. No exemplo a seguir, a docker-compose up web também criará e iniciará db e redis.
Exemplo simples:
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
Nota: depende_on não esperará que db e redis estejam "prontos" antes de iniciar a Web - somente até que eles tenham sido iniciados. Se você precisar esperar que um serviço esteja pronto, consulte Controlando o Pedido de Inicialização para obter mais informações sobre este problema e estratégias para resolvê-lo.
--link
sinalizador agora é um recurso herdado obsoleto do Docker e a documentação sugere "Ele pode ser removido eventualmente" links do contêiner Docker: Legacy . É recomendável não usar o recurso de redes do Docker ou o método de composição do Docker. Achei que isso seria útil para quem está aprendendo sobre esse recurso.