Docker 安裝Redis 無法使用組態檔設定密碼問題

2023-08-25 06:00:24

背景

  最近開發需要使用各種元件,如果都到開發機上安裝,會佔用電腦資源較多。所以使用docker容器來安裝這些元件。例如 redis 、mongodb、mysql、rabitmq、elasticsearch 等等。

遇到的問題

  用edis官方映象啟動容器後,發現沒有載入組態檔。

解決方案

  1.redis映象拉下來後,通過docker run 命令建立並啟動容器。不能使用docker desktop 工具執行容器,那個工具貌似只能設定埠及容器名字,沒找到 掛載組態檔啟動redis的設定。

  2.通過docker desktop 或者 docker 命令  docker pull redis:latest 最新的redis 映象。

  3. 通過 下面的命令 建立並執行容器

  docker run -p 6379:6379 --name myredis -d redis redis-server /etc/redis/redis.conf --appendonly yes

  -p  對映redis 使用6379埠

  --name 指定容器名字 為 myredis

  -d 指定使用的映象名字 ,是用redis 映象建立容器,後面緊接的引數 redis-server 是容器啟動後,執行redis-server 命令 並掛載 etc/redis/redis.conf 檔案 。

  -- appendonly yes 表示啟動redis時開啟redis 持久化設定。

  這讓建立容器,容器會啟動失敗。

  通過docker ps 檢視當前的容器,找到剛建立的容器,通過 docker logs 容器id  檢視容器的啟動紀錄檔,或者通過docker desktop 工具點選對應的容器,然後點選Logs索引標籤,檢視紀錄檔。

  紀錄檔裡會提示 /etc/redis/redis.conf  檔案不存在。

  此時我們可以通過 docker exec -it 【容器id】/bin/bash 命令進入容器,容器內也是一個liunx 系統,可以通過liunx命令建立對應的目錄和組態檔,並通過vi命令編輯檔案,設定密碼。

  或者通過Docker DeskTop 工具 進入容器後點選Files 就可以像在windows 下一樣,以資料夾的方式瀏覽容器內的檔案,

  可以找到對應的目錄,將原生的檔案上傳上去(注意只能上傳資料夾,可以到本地建個redis 目錄,裡面包含redis.conf 檔案設定,然後將目錄上傳到對應的資料夾)。見圖:  

   設定裡編輯好要設定的密碼。檔案上傳到容器內後,點選右上角的restart 重啟容器,容器內的redis就會自動載入組態檔。裡面就指定了密碼。注意設定裡的bind 127.0.0.1 設定需要註釋掉,

  不然外部無法連線容器內的redis。

  重啟容器後,可以通過 進入容器內的redis 

  docker exec -it [容器id]  redis-cli   

  或者 

  docker exec -it [容器id] /bin/bash

  redis-cli -h 127.0.0.1 -p 6379 -a 123456

  進入容器後,通過 config get requirepass 命令獲取當前設定的賬號密碼,如果指定密碼登入了,會返回當前的密碼。

  如果通過第一個命令直接進入,會提提示需要驗證密碼,此時可以通過auth 【密碼】 命令驗證redis的密碼。

  也可以重新修改密碼 config set requirepass [新密碼] 修改後儲存回 組態檔  config rewrite
  到這裡 docker redis 通過設定啟動,修改密碼等操作已完成。

  之前在網上找了很多資料,大部分都是通過 docker run 命令 加  -v 引數 掛載 主機 目錄及組態檔,這種方式我沒成功~不知道問題出在哪裡,最後啟動的redis 都沒有應用上組態檔,

  且檢視容器內對映的組態檔,redis.conf 它顯示的是目錄,不是檔案...

  

  如果通過Docker Desktop 工具的映象管理直接啟動容器,不能指定的容器內redis啟動時掛載 redis.conf 設定。Environment variables 引數設定也不起作用。 docker desktop 是方便,但是需要額外設定一些引數,還是需要通過 

  docker run 命令來建立和啟動容器。