Опитайте да промените 127.0.0.1:6379
до redis:6379
.
Въпреки че Redis работи, вашият python
контейнерът не може да комуникира с него; това е защото се опитва да се свърже с 127.0.0.1:6379
, но от гледна точка на контейнера, там не работи нищо. Това може да бъде малко разочароващо за отстраняване на грешки, но е малко по-лесно, ако имате предвид, че контейнерите получават собствено мрежово пространство от имена. В резултат на това python
localhost на !=redis
's localhost !=localhost
на вашата хост машина .
За щастие е лесно да свързвате контейнери, които споделят един и същ мост и по подразбиране docker-compose
създава единна мостова мрежа и свързва всичките ви контейнери с тях, осигурявайки необходимия DNS, за да им позволи да се откриват един друг. В резултат на това комуникацията между контейнери работи просто чрез използване на името на услугата.
Като забележка е възможно да се изпълняват контейнери в едно и също пространство от имена и да се изпълняват в тях в пространството от имена на хоста чрез --net=container:<container-id>
или --net=host
флаг. Това е особено полезно за стартиране на инструменти за отстраняване на грешки в контейнер и прикачването им към мрежовото пространство от имена на друг контейнер или на хоста, напр. използвайки netshoot, за да видите какви портове слушат в контейнера (открити или не), docker run --rm -it --net container:test_web_1 nicolaka/netshoot netstat -tulpn
.