今天幫別人看了一個redis的問題裂逐,記錄了過程眶根,細節(jié)方面還是要注意的,這里i說一下郑象,主要是這個路徑的問題
1.查找并拉取redis
注意的是
[root@localhost docker]# docker pull redis:4.0.1
[root@localhost docker]# docker search redis
直接啟動
docker run -itd --name redis-stb -p 6379:6379 redis
注意的是,當(dāng)你在容器中尋找的時候茬末,是找不到配置文件的厂榛,所以如果要修改配置,還得自己加一個配置文件丽惭,然后使用該配置文件進行重新run一個容器噪沙。可以直接加入容器中然后啟動吐根,不過更推薦使用掛載的方式正歼,因為這樣更利于修改和查看,以及對應(yīng)的持久化目錄或者log目錄也一樣的配置拷橘,下面使用掛載的方式進行操作局义。
增加配置文件
注意這里的配置文件內(nèi)寫的路徑是容器內(nèi)的路徑
# bind 127.0.0.1 #限制redis只能本地訪問,有其他需求可自行修改
protected-mode yes
# 默認yes冗疮,開啟保護模式萄唇,自選
daemonize no
# 默認no,改為yes意為以守護進程方式啟動术幔,可后臺運行另萤,除非kill進程,改為yes會使配置文件方式啟動redis失敗
logfile /opt/redis.log
# 對應(yīng)log日志地址诅挑,掛載再宿主機上
dir /opt/data
# 輸入本地redis數(shù)據(jù)庫存放文件夾(可選)
appendonly yes
# redis持久化(可選)
requirepass myPassword
#(其中myPassword就是要設(shè)置的密碼)
注意
1.路徑都需要存在
注意你掛載地址的關(guān)系四敞,中間不能有不存在的地址,比如上述 /opt/redis/data拔妥,容器中實際沒有data這個目錄忿危,但是data掛載了宿主機的/opt/reids/data中的data,他之前的都有没龙,所以沒事铺厨,如果你容器這個中間加一個其他不存在的路徑缎玫,變成/opt/redis/data,redis目錄不存在解滓,對應(yīng)宿主機有沒有掛載對應(yīng)赃磨,就會出錯了
2.文件權(quán)限
宿主機上的log文件,要給他一個執(zhí)行權(quán)限
還有 data 目錄的權(quán)限chmod -R 777 /opt/redis/data
完整代碼
// 使用 host
docker run --net=host --name redis_stb -v /opt/redis/redis.log:/opt/redis.log -v /opt/redis/data:/opt/data -v /opt/redis/redis.conf:/etc/redis.conf --privileged=true redis redis-server /etc/redis.conf
// 或者使用端口對應(yīng)
docker run -d -p 6379:6379 --name redis_stb -v /opt/redis/redis.log:/opt/redis.log -v /opt/redis/data:/opt/data -v /opt/redis/redis.conf:/etc/redis.conf --privileged=true redis redis-server /etc/redis.conf
參數(shù)解釋說明:
-P 端口映射:使用本身對應(yīng)的端口洼裤,于net參數(shù)相關(guān)使用
--net=host 使用host網(wǎng)絡(luò)模式邻辉,直接使用宿主端口
這兩步你可以使用-p的端口映射,網(wǎng)絡(luò)模式自己注意逸邦,畢竟要相互交互的。
--name myredis 指定該容器名稱在扰,查看和進行操作都比較方便缕减。(可選,不指定名字就不用)
-v 掛載目錄芒珠,規(guī)則與端口映射相同桥狡。用冒號隔開,前面是宿主機地址對應(yīng)后面容器地址皱卓,意思是當(dāng)使用該路徑下的文件或者路徑時裹芝,去使用對應(yīng)宿主機上的文件或路徑,容器中也不需要有娜汁。
以這里的為例:
-v /opt/reids/redis.log:/opt/redis.log //容器中opt下找redis.log嫂易,會去宿主機/opt/reids找
-v /opt/reids/data:/opt/data//容器中opt下找data,會去宿主機/opt/reids找data
-v /opt/redis/redis.conf:/etc/redis.conf//容器中opt下找redis.conf掐禁,會去宿主機/opt/redis/redis.conf找
重要: 配置文件映射怜械,docker鏡像redis 默認無配置文件。
-d redis 表示后臺啟動redis
redis-server /etc/redis/redis.conf //以配置文件啟動redis傅事,加載容器內(nèi)的conf文件缕允,最終找到的是掛載的目錄/usr/local/docker/redis/redis.conf
//注意這里的目錄,是你配置文件中的那個目錄蹭越,別寫錯了障本,不要直接寫宿主機上的目錄
重要: docker 鏡像reids 默認 無配置文件啟動
--appendonly yes 開啟redis 持久化(可以再配置文件中寫)
可能存在的問題(某個文件無權(quán)限):
Can't open the log file: Permission denied
解決辦法:以這里的為例,加上執(zhí)行權(quán)限即可
chmod 777 redis.log