如何使用 docker-compose 加载 rejson.so

noo*_*noo 2 redis docker-compose

我想在 Redis 中存储 json 类型,因此我设置将 RedisJSON 模块与 docker-compose 一起使用。但是,我一直无法运行它。代码如下。我还尝试使用 redis.conf 填充与命令相同的参数,但发生了分段错误。我的脚步怎么了?

docker-compose.yml

version: '3.8'
services:
  redis:
    container_name: redis
    hostname: redis
    image: redis:7.0.0-alpine
    command: redis-server --loadmodule /etc/redis/modules/rejson.so
    volumes:
      - /etc/redis/redis.conf:/etc/redis/redis.conf
      - /etc/redis/modules/rejson.so:/etc/redis/modules/rejson.so
Run Code Online (Sandbox Code Playgroud)

环境

Node.js 版本:16.14.1
Node Redis 版本:4.0.6
平台:Mac OS 12.3.1


已编辑

分段错误是由于不存在的includes选项造成的。重复了以下消息。执行格式错误是什么意思?

# oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
# Redis version=7.0.0, bits=64, commit=00000000, modified=0, pid=1, just started
# Configuration loaded
* monotonic clock: POSIX clock_gettime
# Warning: Could not create server TCP listening socket ::1:6380: bind: Address not available
* Running mode=standalone, port=6380.
# Server initialized
# Module /etc/redis/modules/rejson.so failed to load: Error loading shared library /etc/redis/modules/rejson.so: Exec format error
# Can't load module from /etc/redis/modules/rejson.so: server aborting
Run Code Online (Sandbox Code Playgroud)

小智 5

经过大量的尝试和错误,我发现到目前为止,redis v7 docker 镜像似乎缺少 rejson 模块。

我现在使用 redis/stack-server ,它已经包含所有模块(包括)rejson。它基于redis v6,请参阅:

compose.yaml现在的样子是这样的:

version: "3"

services:
  redis:
    image: redis/redis-stack
    volumes:
      - redis_data:/data:rw
    ports:
      - 6379:6379
    restart: unless-stopped

volumes:
  redis_data:
Run Code Online (Sandbox Code Playgroud)

然后你可以在 redis-cli 中尝试一下:

127.0.0.1:6379> JSON.SET employee_profile $ '{ "employee": { "name": "alpha", "age": 40,"married": true }  } '
OK
127.0.0.1:6379> JSON.GET employee_profile
"{\"employee\":{\"name\":\"alpha\",\"age\":40,\"married\":true}}"
Run Code Online (Sandbox Code Playgroud)

如果您仍然有以前安装的 Docker 卷,则应首先删除它们。否则,您的新容器可能会在读取旧数据库时出现问题。