Prova a modificare 127.0.0.1:6379
a redis:6379
.
Sebbene Redis sia in esecuzione, il tuo python
il contenitore non è in grado di comunicare con esso; questo perché sta tentando di connettersi a 127.0.0.1:6379
, ma dal punto di vista del contenitore, non c'è nulla in esecuzione lì. Questo può essere un po' frustrante per il debug, ma è un po' più semplice se tieni presente che i contenitori ottengono il proprio spazio dei nomi di rete. Di conseguenza, python
's localhost !=redis
's localhost !=localhost
della tua macchina host .
Fortunatamente, è facile connettere contenitori che condividono lo stesso bridge e, per impostazione predefinita, docker-compose
crea un'unica rete bridge e connette tutti i tuoi container ad essi, fornendo il DNS necessario per consentire loro di scoprirsi l'un l'altro. Di conseguenza, la comunicazione da contenitore a contenitore funziona semplicemente utilizzando il nome del servizio.
Come nota, è possibile eseguire contenitori nello stesso spazio dei nomi ed eseguirli in essi nello spazio dei nomi dell'host, tramite il --net=container:<container-id>
o --net=host
bandiera. Ciò è particolarmente utile per eseguire strumenti di debug in un container e collegarli allo spazio dei nomi di rete di un altro container o dell'host, ad es. usando netshoot per vedere quali porte sono in ascolto all'interno del container (esposte o meno), docker run --rm -it --net container:test_web_1 nicolaka/netshoot netstat -tulpn
.