Prova att ändra 127.0.0.1:6379
till redis:6379
.
Även om Redis körs, din python
behållaren kan inte kommunicera med den; detta beror på att den försöker ansluta till 127.0.0.1:6379
, men ur containerns perspektiv är det inget som kör där. Detta kan vara lite frustrerande att felsöka, men det är lite enklare om du tänker på att behållare får ett eget nätverksnamnområde. Som ett resultat, python
s localhost !=redis
's localhost !=din värddators localhost
.
Lyckligtvis är det enkelt att koppla ihop behållare som delar samma brygga, och som standard docker-compose
skapar ett enda bryggnätverk och ansluter alla dina behållare till dem, vilket ger den nödvändiga DNS för att de ska kunna upptäcka varandra. Som ett resultat fungerar behållare-till-behållare-kommunikation helt enkelt genom att använda tjänstens namn.
Som en notering är det möjligt att köra behållare i samma namnutrymme och att köra i dem i värdens namnområde, via --net=container:<container-id>
eller --net=host
flagga. Detta är särskilt användbart för att köra felsökningsverktyg i en behållare och koppla dem till nätverkets namnutrymme för antingen en annan behållare eller värden, t.ex. använder netshoot för att se vilka portar som lyssnar i behållaren (exponerade eller inte), docker run --rm -it --net container:test_web_1 nicolaka/netshoot netstat -tulpn
.