我在開發一個asp.net core的專案, 使用 StackExchange.Redis 套件來讀取另一個docker container裡的redis資料庫, 而我的專案本身也是使用docker的方式部署, 並且這兩個container是屬於同一個docker bridge network。
連線時是執行 ConnectionMultiplexer.Connect("redis的container名稱:6379,abortConnect=false,password=xxx"), 是正常的。
但會使用docker bridge network的人應該都知道, 連線的主機(container名稱)是可以不用再加port的。
但若我改成 ConnectionMultiplexer.Connect("redis的container名稱,abortConnect=false,password=xxx"), 也就是把port拿掉就失敗了, 得到 The specified endpoint is not defined (Parameter 'endpoint') 的錯誤訊息。
這是為什麼呢? 是因為StackExchange.Redis套件在docker bridge network也必須還是要加port才能連嗎? 還是這套件有提供別的方法可以不用port也能連, 或是還有其他原因? 謝謝
(我希望在docker network裡, 用container name連線就好, 不希望還要再加上port號)
我沒有寫 asp.net,所以無法幫你用 asp.net 驗證,不知道你能不能在你的變數區增加
# 變數宣告,我不知道 asp.net 怎麼宣告。
redis_server=redis:6379
# 程式區
ConnectionMultiplexer.Connect("redis_server",abortConnect=false,password=xxx")
是不是這樣就解決了呢?
docker 內部可以直接打名稱,我理解那是解析的的事情,並不是自動幫你增加 port 的,
範例 docker-compose.yml
version: '3'
services:
redis:
image: redis:latest
ports:
- "36379:6379"
networks:
- mynetwork
centos:
image: centos:7
command: tail -f /dev/null
networks:
- mynetwork
depends_on:
- redis
volumes:
- ./redis-cli:/usr/local/bin/redis-cli
container_name: my_centos
networks:
mynetwork:
centos 內部
[root@7d6f82742cd2 /]# ping redis
PING redis (172.30.0.2) 56(84) bytes of data.
64 bytes from example-app-redis-1.example-app_mynetwork (172.30.0.2): icmp_seq=1 ttl=64 time=0.175 ms
他只是幫你解析而已。
所以你的 asp.net 如果那個函數/式沒有自動幫你帶預設 port,本來就不會找到正確位置吧?