Seu
DATABASE_URL
refere-se a 127.0.0.1
, que é o adaptador de loopback (mais aqui). Isso significa "conectar-se a mim mesmo". Ao executar os dois aplicativos (sem usar o Docker) no mesmo host, ambos são endereçáveis no mesmo adaptador (também conhecido como
localhost
). Ao executar os dois aplicativos em contêineres, eles não estão no host local como antes. Em vez disso, você precisa apontar a
web
contêiner para o db
o endereço IP do contêiner no docker0
adaptador - que docker-compose
conjuntos para você. Mudar:
127.0.0.1
para CONTAINER_NAME
(por exemplo, db
) Exemplo:
DATABASE_URL: postgres://username:[email protected]:5432/mydatabase
para
DATABASE_URL: postgres://username:[email protected]:5432/mydatabase
Isso funciona graças aos links do Docker:a
web
container tem um arquivo (/etc/hosts
) com um db
entrada apontando para o IP que o db
recipiente está ligado. Este é o primeiro lugar que um sistema (neste caso, o contêiner) procurará ao tentar resolver nomes de host.