背景
最近開發需要使用各種元件,如果都到開發機上安裝,會佔用電腦資源較多。所以使用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 命令來建立和啟動容器。