1.起因

公司申请了六台华为鲲鹏服务器,操作系统是openEuler的,一开始按照redis官网的安装流程安装,在make的时候报错,不知道是什么问题,如果有人知道的话欢迎指导一下;然后选择使用Docker来安装redis,在这里记录个坑,在ARM64架构的电脑下用docker启动redis无法正常启动

2.解决办法

首先安装docker

  1. yun install docker

然后用docker拉去redis镜像

  1. docker pull redis

然后我们启动redis

  1. docker run -itd --name redis -p 6379:6379 redis

但是我们用命令docker ps查看是否启动时,发现没有启动,我们查看一下日志

  1. docker logs --tail=1000 containerid

ARM64架构的Linux操作系统Docker安装Redis - 图1
我们注意最后一行,然后我查阅了一下,在GitHub上,有人提交了一个issue,问题意思就是在ARM64的电脑运行redis会有问题
详见https://github.com/redis/redis/commit/b02780c41dbc5b28d265b5cf141c03c1a7383ef9
然后注意到本次修改文件涉及到配置文件的修改:

  1. # In some cases redis will emit warnings and even refuse to start if it detects
  2. # that the system is in bad state, it is possible to suppress these warnings
  3. # by setting the following config which takes a space delimited list of warnings
  4. # to suppress
  5. #
  6. # ignore-warnings ARM64-COW-BUG

那么我们要解决这个问题,需要把该注释放开。那么这样的话,我们就需要配置启动参数,把外部的配置文件放入容器内,让容器启动执行该配置文件
贴一个下载redis.conf的地址:https://raw.githubusercontent.com/redis/redis/6.0/redis.conf
然后我们在该配置文件最下面把这条注释放开,然后赋予该文件777权限(chmod +777 /data/redis/redis.conf 否则redis无法挂载该文件到容器内)
然后修改一下启动命令

  1. docker run -p 6379:6379 --name redis -v /data/redis/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

-p (指定端口) 对外暴露端口:容器内部端口(redis.conf内部配置端口)
-v 挂载目录 将当前宿主机的/data/redis/redis.conf文件挂载到容器/etc/redis/redis.conf文件
-v .. 将当前宿主机的/data/redis/data目录挂载到容器的/data目录
-d 在后台启动并使用 容器的/etc/redis/redis.conf文件
—appendonly yes 开启redis的aof持久化

然后我们执行该命令,再次查看:
ARM64架构的Linux操作系统Docker安装Redis - 图2
ARM64架构的Linux操作系统Docker安装Redis - 图3
这样,我们就安装成功了~