Tente alterar
127.0.0.1:6379
para redis:6379
. Embora o Redis esteja em execução, seu
python
container não consegue se comunicar com ele; isso ocorre porque ele está tentando se conectar a 127.0.0.1:6379
, mas da perspectiva do contêiner, não há nada em execução lá. Isso pode ser um pouco frustrante para depurar, mas é um pouco mais fácil se você tiver em mente que os contêineres obtêm seu próprio namespace de rede. Como resultado, python
's localhost !=redis
's localhost !=o localhost
da sua máquina host . Felizmente, é fácil conectar contêineres que compartilham a mesma ponte e, por padrão,
docker-compose
cria uma rede de ponte única e conecta todos os seus contêineres a eles, fornecendo o DNS necessário para permitir que eles se descubram. Como resultado, a comunicação entre contêineres funciona simplesmente usando o nome do serviço. Como observação, é possível executar contêineres no mesmo namespace e executá-los no namespace do host, por meio do
--net=container:<container-id>
ou --net=host
bandeira. Isso é especialmente útil para executar ferramentas de depuração em um contêiner e anexá-las ao namespace de rede de outro contêiner ou do host, por exemplo. usando netshoot para ver quais portas estão escutando dentro do contêiner (expostas ou não), docker run --rm -it --net container:test_web_1 nicolaka/netshoot netstat -tulpn
.