本地訪問不到公網(wǎng)redis的解決方案
一、目前情況
首先
我用的公網(wǎng)ip,即服務器地址是:106.14.xx.xx
由于我的redis是放到了服務器的docker容器中,
而端口映射是主機–>容器是:6380–>6379/tcp
所以在訪問redis時,我需要訪問的是
host:106.14.xx.xx
port:6380
因為肯定是要訪問公網(wǎng)的,訪問6380端口通過映射到docker中redis用的6379端口。
二、解決方案
方案一
我這里出現(xiàn)了一個問題,通過可視化工具根本連接不上redis數(shù)據(jù)庫,所以考慮是配置文件中是否不允許外網(wǎng)的ip來訪問【也可能是端口沒在安全組?】。
所以我通過下面的語句,對服務器上的redis的配置文件進行了更改【進入的方式請看 容器與數(shù)據(jù)卷的對應關系這一節(jié)】,將原來的
bind 127.0.0.0
改成了:
bind 0.0.0.0
并且將下面的控制改成了no:
protected-mode no
方案二 !!!(重要)
經(jīng)過上面一頓折騰,終于報錯變了:
Redis Client On Error: ReplyError: NOAUTH Authentication required. Config right?
說明要驗證身份!
這里最關鍵的一點就是,明明兩個配置文件中都沒有給redis配置密碼,
即配置文件都是:
通過grep 'requirepass' /var/data/redis/redis.conf
顯示# requirepass foobared說明唯一寫密碼的地方,也被注釋掉了。
那為什么沒有密碼還要驗證身份呢????!
可能是因為 Redis 在啟動時使用了不同的配置文件,或者在啟動容器時通過命令行參數(shù)或環(huán)境變量設置了密碼
(1) 關鍵??!檢查通過啟動命令行參數(shù)設置了密碼這種情況,你需要通過下面的語句進行排查:
docker inspect --format='{{.Config.Cmd}}' redis
如果出現(xiàn)了:
[-- requirepass xxxxxx-- appendonly yes]
說明Redis 容器確實是通過啟動命令行參數(shù)設置了密碼 requirepass xxxxxx。這意味著即使在 redis.conf 文件中沒有設置密碼,Redis 也會使用這個命令行參數(shù)指定的密碼(后面帶著這個密碼再訪問,就可以正常連接公網(wǎng)上的redis了)。
(2) 檢查 Redis 配置文件路徑 (這一個地方可能不太對)
確認容器中的 Redis 實際使用的是哪個配置文件。有可能 Redis 使用的并不是 /usr/local/etc/redis/redis.conf 文件。
redis-cli CONFIG GET *config-file*
如果出現(xiàn)了:
1) "cluster-config-file" 2) "nodes.conf"
說明確實,之前改動配置文件是徒勞的,因為redis根本沒有用那個配置文件。
容器與數(shù)據(jù)卷的對應關系
1.更改容器中的redis的配置文件
因為我的容器中的目錄與數(shù)據(jù)卷(服務器上地址)的對應關系:
容器中的目錄 ----》 數(shù)據(jù)卷(服務器上地址)
/usr/local/etc/redis ----》 /var/data/redis
/data ----》 /var/data/redis/data
所以此時我直接在服務器上訪問容器中的redis的配置文件(或者進入docker,再進入docker的目錄對配置文件進行更改):
[root@iZuf67k70ucx14s6zcv54dZ var]# vi /var/data/redis/redis.conf
2 更改服務器物理機上的redis的配置文件
我這里是通過:
sudo vi /www/server/redis/redis.conf
即可進入物理機上redis的配置文件。
同樣修改完后,要進行重新啟動:
sudo systemctl restart redis
重新描述一下
1. 服務器上的物理機 Redis
如果你需要修改服務器上物理機的 Redis 配置文件:
位置: 根據(jù)你之前的信息,配置文件的位置可能是 /www/server/redis/redis.conf。
操作: 直接在物理機上編輯這個文件,確保 bind 配置項是:
bind 0.0.0.0
重啟 Redis: 修改后,重啟 Redis 使配置生效。你可以通過服務管理工具(如 systemctl 或 service)來重啟:
sudo systemctl restart redis
2. Docker 容器中的 Redis
如果你需要修改 Docker 容器中的 Redis 配置文件:
位置: 如果 Docker 容器中的 Redis 使用 /usr/local/etc/redis/redis.conf,你需要在這個路徑下編輯配置文件。
操作: 如果文件在 Docker 容器中,首先進入容器:
docker exec -it <容器名或容器ID> bash
然后使用 vi 或其他編輯工具修改文件:
vi /usr/local/etc/redis/redis.conf
將 bind 配置項改為:
bind 0.0.0.0
重啟 Docker 容器: 修改配置后,重啟 Docker 容器以應用新配置:
docker restart <容器名或容器ID>
總結
如果你要修改的是物理機上的 Redis,直接在物理機上編輯配置文件 /www/server/redis/redis.conf。
如果你要修改的是Docker 容器中的 Redis,需要在 Docker 容器中編輯配置文件 /usr/local/etc/redis/redis.conf,并重啟容器。
確保你編輯的是正確的配置文件并且正確重啟了 Redis 服務或 Docker 容器,以確保更改生效。
以上就是本地訪問不到公網(wǎng)redis的解決方案的詳細內容,更多關于本地訪問不到redis的資料請關注腳本之家其它相關文章!
相關文章
CentOS7.5使用mysql_multi方式安裝MySQL5.7.28多實例(詳解)
這篇文章主要介紹了CentOS7.5使用mysql_multi方式安裝MySQL5.7.28多實例,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01Redis基本數(shù)據(jù)類型List常用操作命令
這篇文章主要為大家介紹了Redis數(shù)據(jù)類型List常用命令操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05