Docker构建银河麒麟arm架构redis镜像
Docker构建银河麒麟arm架构redis镜像
解决问题:银河麒麟arm架构下docker容器启动redis报错:
<jemalloc>: Unsupported system page size
分析:
redis在新版本中默认使用了jemalloc进行内存管理。由于jemalloc 在编译时就决定了page size的大小,而这个page size 不会由于kernel的配置而改变,因此jemalloc在某个机器上编译,然后运行在其它机器上时可能会出现问题。
由于官方arm镜像的编译环境的page size与当前运行环境的page size不一致导致报错。
解决方案:
在联网环境下使用docker自定义构建redis镜像(下面教程使用个人mac苹果电脑)
一、基础环境
docker、docker-compose安装(此步骤省略)
二、使用docker拉取银河麒麟兼容镜像
docker pull openeuler/openeuler:22.03
三、创建Dockerfile
FROM openeuler/openeuler:22.03# 安装依赖和 redis
RUN dnf update -y && \dnf install -y redis && \dnf clean all# 启用 redis(无密码)
EXPOSE 6379CMD ["redis-server", "--protected-mode", "no", "--bind", "0.0.0.0"]
四、构建redis镜像
docker buildx build --platform linux/arm64 --pull=false -t redis-64k --output type=docker .
五、redis镜像相关操作
# 1、查看镜像
docker images
# REPOSITORY TAG IMAGE ID CREATED SIZE
# redis-64 latest c7b332d65851 22 minutes ago 1.01GB# 2、保存镜像
docker save -o redis-64k.tar redis-64k
# 3、挂载镜像
docker load -i redis-64k.tar
# 4、查看版本
docker exec -it <容器名或ID> redis-server --version
六、创建docker-compose启动Redis镜像
version: '3.8'services:redis:image: redis-64k:latestcontainer_name: lh-redisrestart: alwaysports:- "10513:6379"volumes:- "./data/redis:/data"command: redis-server --appendonly yes --requirepass "lanhai@root"environment:- TZ=Asia/Shanghai
docker-compose相关命令
# 启动
docker-compose up -d
# 停止
docker-compose down