Когато свързвате портове като този '9002:6379' казвате на Docker да препраща трафик от localhost:9002 -> redis:6379 . Ето защо това работи от вашата хост машина:
redis-cli -h localhost -p 9002 -n 0
Въпреки това, когато контейнерите говорят помежду си, всички те са свързани към една и съща мрежа по подразбиране (мостът Docker или docker0 ). По подразбиране контейнерите могат да комуникират помежду си свободно в тази мрежа, без да има нужда от отваряне на портове. В рамките на тази мрежа вашият redis контейнерът прослушва трафик на обичайния си порт (6379 ), хостът изобщо не участва. Ето защо комуникацията между контейнери работи на 6379 .