今天帮别人看了一个redis的问题,记录了过程,细节方面还是要注意的,这里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
注意的是,当你在容器中寻找的时候,是找不到配置文件的,所以如果要修改配置,还得自己加一个配置文件,然后使用该配置文件进行重新run一个容器。可以直接加入容器中然后启动,不过更推荐使用挂载的方式,因为这样更利于修改和查看,以及对应的持久化目录或者log目录也一样的配置,下面使用挂载的方式进行操作。
增加配置文件
注意这里的配置文件内写的路径是容器内的路径
# bind 127.0.0.1 #限制redis只能本地访问,有其他需求可自行修改
protected-mode yes
# 默认yes,开启保护模式,自选
daemonize no
# 默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
logfile /opt/redis.log
# 对应log日志地址,挂载再宿主机上
dir /opt/data
# 输入本地redis数据库存放文件夹(可选)
appendonly yes
# redis持久化(可选)
requirepass myPassword
#(其中myPassword就是要设置的密码)
注意
1.路径都需要存在
注意你挂载地址的关系,中间不能有不存在的地址,比如上述 /opt/redis/data,容器中实际没有data这个目录,但是data挂载了宿主机的/opt/reids/data中的data,他之前的都有,所以没事,如果你容器这个中间加一个其他不存在的路径,变成/opt/redis/data,redis目录不存在,对应宿主机有没有挂载对应,就会出错了
2.文件权限
宿主机上的log文件,要给他一个执行权限
还有 data 目录的权限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
// 或者使用端口对应
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
参数解释说明:
-P 端口映射:使用本身对应的端口,于net参数相关使用
--net=host 使用host网络模式,直接使用宿主端口
这两步你可以使用-p的端口映射,网络模式自己注意,毕竟要相互交互的。
--name myredis 指定该容器名称,查看和进行操作都比较方便。(可选,不指定名字就不用)
-v 挂载目录,规则与端口映射相同。用冒号隔开,前面是宿主机地址对应后面容器地址,意思是当使用该路径下的文件或者路径时,去使用对应宿主机上的文件或路径,容器中也不需要有。
以这里的为例:
-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,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/docker/redis/redis.conf
//注意这里的目录,是你配置文件中的那个目录,别写错了,不要直接写宿主机上的目录
重要: docker 镜像reids 默认 无配置文件启动
--appendonly yes 开启redis 持久化(可以再配置文件中写)
可能存在的问题(某个文件无权限):
Can't open the log file: Permission denied
解决办法:以这里的为例,加上执行权限即可
chmod 777 redis.log