iT邦幫忙

0

docker容器中的StackExchange.Redis套件連線的問題

  • 分享至 

  • xImage

我在開發一個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號)

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
狗狗兔兔
iT邦新手 3 級 ‧ 2023-09-26 16:23:01

我沒有寫 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,本來就不會找到正確位置吧?

看更多先前的回應...收起先前的回應...
WILL.I.AM iT邦新手 3 級 ‧ 2023-09-26 17:40:24 檢舉

你那個變數一樣得寫死port啊, 但我不想寫死port, 我希望只要連線對象的container名字正確, 就算它突然改port, 我的程式依然可以運作。所以我才想問StackExchange.Redis這個套件能不能做到你所謂的自動幫我解析port或自動帶port這件事

那~看看其他大神有沒有辦法幫你了。

froce iT邦大師 1 級 ‧ 2023-09-27 10:52:29 檢舉

就算它突然改port, 我的程式依然可以運作

能不加port就運行,大部分都是函式裡面幫你加服務的"預設port"。
你要改port只靠domain name還能正常運作怎麼可能。

WILL.I.AM iT邦新手 3 級 ‧ 2023-09-30 11:38:33 檢舉

我要發表回答

立即登入回答