Essayez de changer 127.0.0.1:6379
à redis:6379
.
Bien que Redis soit en cours d'exécution, votre python
le conteneur n'est pas en mesure de communiquer avec lui ; c'est parce qu'il essaie de se connecter à 127.0.0.1:6379
, mais du point de vue du conteneur, il n'y a rien en cours d'exécution. Cela peut être un peu frustrant à déboguer, mais c'est un peu plus facile si vous gardez à l'esprit que les conteneurs ont leur propre espace de noms réseau. En conséquence, python
's localhost !=redis
's localhost !=le localhost
de votre machine hôte .
Heureusement, il est facile de connecter des conteneurs qui partagent le même pont, et par défaut, docker-compose
crée un réseau de pont unique et y connecte tous vos conteneurs, en fournissant le DNS nécessaire pour leur permettre de se découvrir les uns les autres. Par conséquent, la communication de conteneur à conteneur fonctionne simplement en utilisant le nom du service.
Notez qu'il est possible d'exécuter des conteneurs dans le même espace de noms et de les exécuter dans l'espace de noms de l'hôte, via le --net=container:<container-id>
ou --net=host
drapeau. Ceci est particulièrement utile pour exécuter des outils de débogage dans un conteneur et les attacher à l'espace de noms réseau d'un autre conteneur ou de l'hôte, par ex. en utilisant netshoot pour voir quels ports écoutent dans le conteneur (exposés ou non), docker run --rm -it --net container:test_web_1 nicolaka/netshoot netstat -tulpn
.