根据宿主机的Redis配置文件启动Docker中的Redis

Posted youngyajun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据宿主机的Redis配置文件启动Docker中的Redis相关的知识,希望对你有一定的参考价值。

虚拟机环境CentOS 7.7

前提:安装好了Docker容器,已经拉取了Redis镜像

 

1.创建Redis配置文件存目录

[root@localhost ~]# mkdir -p /usr/local/docker/redis/conf

2.创建Redis持久化目录 

mkdir -p /usr/local/docker/redis/data

 

3.下载配置文件并且传输到/usr/local/docker/redis/conf下

redis.conf下载地址1:官网配置文件redis.conf
redis.conf下载地址2:Github的redis.conf

4.编辑配置文件(也可以先编辑好后传输到/usr/local/docker/redis/conf下)

#端口设置
port 6379

#远程访问(注释掉bind 127.0.0.1;改protected-mode yes为protected-mode no)
#bind 127.0.0.1
protected-mode no

#守护进程方式(非后台模式,daemonize yes会使配置文件方式启动redis失败;如果不是no,docker会一直启动失败,原因是docker本身需要后台运行,而这个配置选项也是以守护进程启动,两者会冲突)
daemonize no

#redis持久化
appendonly yes

#指定本地数据库存放目录
dir ./

配置文件其他配置参考:redis.conf配置

后面启动容器测试发现,下载的配置文件有一项配置repl-diskless-load disabled读取会报错,在472行附近,把repl-diskless-load disabled注释掉(可能是新出的配置参数,具体看注释说明):

*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 472
>>> \'repl-diskless-load disabled\'
Bad directive or wrong number of arguments

 

5.创建容器,配置文件映射

[root@localhost conf]# docker run -d -p 6379:6379 \\
> -v /usr/local/docker/redis/conf/redis.conf:/etc/redis/redis.conf \\
> -v /usr/local/docker/redis/data:/data \\
> --privileged=true \\
> --name myredis redis:latest \\
> redis-server /etc/redis/redis.conf \\
> --appendonly yes

或者一行:

docker run -d -p 6379:6379 -v /usr/local/docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/redis/data:/data --privileged=true --name myredis redis:latest redis-server /etc/redis/redis.conf --appendonly yes

 

注释:

#docker启动命令
docker run

#后台启动
-d
  
#宿主机容器端口映射
-p 6379:6379


#配置文件映射,容器启动成功可以通过更改宿主机的配置文件来达到更改容器实际配置文件的目的
-v /usr/local/docker/redis/conf/redis.conf:/etc/redis/redis.conf

#挂载持久化文件
-v /usr/local/docker/redis/data:/data
/usr/local/my-redis/data是宿主机中持久化文件的位置
/data/是容器中持久化文件的位置(需要和配置文件中dir属性值一样),

#容器内部使用主机的所有Linux内核功能,docker容器防火墙完全开放
--privileged=true

#运行镜像redis,并且启动后容器名命名为myredis
--name myredis redis:latest

#配置文件方式启动redis
redis-server /usr/local/etc/redis/redis.conf

#持久化
--appendonly yes

6.连接测试

 

 

 7.进入Docker Redis容器

  7.1 查容器ID 

[root@localhost conf]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
9cac1dfcba0b        redis:latest        "docker-entrypoint..."   13 minutes ago      Up 13 minutes       0.0.0.0:6379->6379/tcp   myredis

  7.2 执行:docker exec -it 容器id /bin/bash

[root@localhost conf]# docker exec -it 9cac1dfcba0b /bin/bash
root@9cac1dfcba0b:/data# ls
appendonly.aof  dump.rdb
root@9cac1dfcba0b:/data# cd /etc/redis/
root@9cac1dfcba0b:/etc/redis# ls
redis.conf
root@9cac1dfcba0b:/etc/redis# 

  可以发现aof文件和启动配置文件

  7.3 退出 Ctrl + d

 

 如果虚拟机挂起后,再次开启无法访问Redis,可以尝试以下解决方法:

1.vi编辑/etc/sysctl.conf配置文件,在最后添加
net.ipv4.ip_forward = 1
2.CentOS7的话多一步,vi编辑/usr/lib/sysctl.d/50-default.conf增加
net.ipv4.ip_forward = 1 
3.重启网络服务
systemctl restart network

 

以上是关于根据宿主机的Redis配置文件启动Docker中的Redis的主要内容,如果未能解决你的问题,请参考以下文章

Docker教程-6-在Redis主从复制基础上搭建哨兵模式

Docker教程-6-在Redis主从复制基础上搭建哨兵模式

docker 怎么把宿主机的文件拷贝到运行的容器中

docker镜像中的微服务怎么访问宿主机上的oracle数据库呢

在群晖的 Docker 中自定义配置 Redis

使用docker搭建redis集群