1、linux中运行下面的命令拉取redis
docker pull redis
2、新建目录 /mnt/Redis
然后在该目录下分别新建Conf和Data目录,分别用于挂载配置文件和存放数据持久化文件。下载 redis.conf 配置文件,将http://download.redis.io/redis-stable/redis.conf文件下载下来并存放到/mnt/RedisConf目录下,并修改如下配置:
- 修改端口:port 6666
- 修改密码:requirepass 123456
- 修改持久化:appendonly yes
- 修改连接:bind 0.0.0.0 redis3.2以上版本默认开启保护模式,不允许外网访问,0.0.0.0,表示允许所有的ip地址访问
3、执行命令,创建并启动redis容器
docker run -p 6666:6379 --name redis-6666 -v E:/Docker/Redis/Conf/redis.conf:/etc/redis/redis.conf -v E:/Docker/Redis/Data:/data -d redis redis-server /etc/redis/redis.conf --requirepass 123456 --appendonly yes
各个参数说明:
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口,如这里我都指定的是 6666
--name:为容器指定一个名称,如这里我指定的名称为 redis-6666
v E:/Docker/Redis/Conf/redis.conf:/etc/redis/redis.conf,把宿主机配置好的 redis.conf 放到容器内的这个位置中
-v E:/Docker/Redis/Data:/data,把 Redis 持久化的数据在宿主机内显示,做数据备份
-d: 后台运行容器,并返回容器 ID
--requirepass:设置密码
--appendonly:持久化设置
/docker run -p 6666:6379 --name redis-6666 -v /mnt/redis/Conf/redis.conf:/etc/redis/redis.conf -v /mnt/redis/Data:/data -d redis redis-server /etc/redis/redis.conf --requirepass 密码 --appendonly yes
--daemonize no
redis 当daemonize 设置了yes,表示redis在后台运行,当执行docker-compose执行启动redis进程时,docker发现自己无事可做,容器自动结束,所以导致redis启动失败。hou后台运行:daemonize no daemonize最好设置为no
6666:6379 这种端口转发,在阿里云服务器行不通,只能用6666:6666
阿里云售后的解释:原因是docker容器中,redis服务监听的是6666端口,不是6379端口,当访问6666转发到6379端口,容器中没有6379端口,自然无法访问
但是我在windows系统里面配置容器时,系统自动实现过6666:6379这样的端口映射转发策略。所以我觉得可能还是更转发策略配置有关 参考:https://blog.csdn.net/scdncby/article/details/116936829
4、进入到启动的容器
docker exec -it redis-6666 /bin/bash
redis-6666 #redis-6666 为容器名称
5、在容器中使用 redis 客户端
redis-cli
进入容器后,使用以上命令启动 Redis 客户端,将连接到您的本地 Redis 服务器。如果是连接其他服务器的 redis,则需要加参数(主机地址、端口号、密码)
redis-cli -h xx.xxx.xx.xxx -p 6379 -a xxx
注意: 如果使用阿里云等,请务必把相应端口打开,比如我这里测试发现很多端口都连不上,但实际上我防火墙也没开,阿里云安全组里我把我配置容器的端口都打开了。但是telnet 6666和6379端口都不通。最后我只能给阿里发工单让售后协助。 阿里云服务器上部署的服务端应用,访问顺序如下:
当启动容器端口报错时,可以通过netstat -lntp | grep 6379查看哪个程序在占用
可以通过 sudo kill 6379 杀掉占用端口的程序