不知道有沒有小伙伴跟我一樣是使用的Docker鏡像進行Redis集群案例模擬的(三臺虛擬機確實帶不動= =),然后我遇到了一個問題:Could not connect to Redis at 172.17.0.2:6379: Operation timed out
172.17.0.2是我其中一個Redis實例的IP和端口號,并且我用主機ping 172.17.0.2是可以ping通的
于是我又仔細翻了翻官網集群的相關內容,發現了如下一段
大致翻譯下:
目前,Redis Cluster 不支持 NAT 環境以及一般 IP 地址或 TCP 端口重新映射的環境。
而Docker使用技術的就是端口映射:在Docker容器內運行的程序可能會使用與程序認為正在使用的端口不同的端口來公開。
在 Docker 容器內運行的程序可能會使用與程序認為正在使用的端口不同的端口來公開。這對于在同一服務器中同時使用相同端口運行多個容器非常有用。
為了讓Docker兼容Redis Cluster,需要使用Docker的主機組網模式。請參閱Docker 文檔--net=host中的選項以獲取更多信息。
我們來Docker這里瞅瞅
https://docs.docker.com/network/https://docs.docker.com/network/
果然,發現了很關鍵的一句
容器是不會向外暴露任何端口的!
所以才會出現IP能ping通,但是加上端口后Operation timed out
當然,后面也提供了解決方法:啟動容器時加--publish or -p
但是緊接著,官網也提出了這么操作并不安全,并建議如果想讓一個容器可供其他容器訪問,則無需發布該容器的端口。通過將容器連接到同一網絡(通常是橋接網絡)來啟用容器間通信。
雖然提供了處理方法,但是個人還是建議直接按照官網的集群案例來進行集群搭建案例:
https://redis.io/docs/management/scaling/#create-a-redis-clusterhttps://redis.io/docs/management/scaling/#create-a-redis-cluster