0

我正在使用 docker 构建一个小应用程序,分为 3 个服务我有 redisjson 服务一个节点服务器和一个 python 应用程序。

我总是在容器中运行 redis 进行开发,在第一阶段我运行 python 脚本和节点应用程序,我只是用来使用 localhost 连接到 redis。

为了标准化和部署环境,我为每个服务设置了容器,但是当我尝试从其他容器连接到 redis 时,它拒绝连接。下面是我的撰写文件,在复制意大利面的过程中,缩进可能会变得怪异,希望不会。我不得不将 redis 的端口从 6379 切换到 7000,因为它也给我带来了连接问题。

version: '3.7'
networks:
  app-tier:
    driver: bridge

services:
 redis:
  image: 'redislabs/rejson:latest'
  command: ["redis-server", "--bind", "redis", "--port", "6379", "--requirepass", "password"]
  environment:
    - appendonly
  ports:
    - '7000:6379'
  volumes:
    - redis:/data
  networks:
    - app-tier

 node:
  build: ./tickingServer
  environment:
    TZ: Europe/Rome
  depends_on:
    - redis
  # - mariadb 
  links:
    - "redis"
  # - "mariadb"

  ports:
    - 3000:3000
  restart: always
  networks:
    - app-tier

 wsdaemon:
  build: ./socketServer
  environment:
    TZ: Europe/Rome
  depends_on:
    - redis
  links:
    - "redis"
  volumes:
    - ./logs:/usr/src/websocketdaemon/logs
  ports:
    - 8000:8000
  restart: always
  networks:
    - app-tier
volumes:
  redis:

在我的系统上,本地端口和 7000 都是免费的,现在它们正确地导致了 docker-proxy 的使用。根据我将服务命名为连接“redis”的 docker 网络,我将其用作主机名。用于连接的 python 测试片段如下:

import log
import configuration
import redis

config = configuration.configuration()
logger = log.Log().get_logger(
     __name__, config['logFolder'], config['logFormat'])


redis_client = redis.Redis(host='redis', port=7000, db=0, password='password')

nodejs 连接器如下所示:

var Redis = require('ioredis');
var logger = require('../helpers/logHelper');
var JSONCache = require('redis-json');


let modName = "RedisConnector";

var redis = new Redis({
  'host': 'redis',
  'family': 4,
  'db': 0,
  'port': 7000,
  'password': 'password'
});
4

2 回答 2

1

最终我解决了它,将配置文件重构为以下设置:

loadmodule /usr/lib/redis/modules/rejson.so 

protected-mode no

port 6379

timeout 0

tcp-keepalive 300

loglevel notice

logfile ""

databases 4

always-show-logo yes

save 900 1

save 300 10

save 60 10000

dbfilename dump.rdb

appendonly yes

appendfilename "appendonly.aof"

设置开发环境可能仍然只是一个存根和荒谬的工作量。

docker-compose 文件中的服务定义现在如下所示。

redis:
  image: 'redislabs/rejson:latest'
  command: ["redis-server",  "/usr/local/etc/redis/redis.conf", "--bind", "redis", "--port", "6379", "--requirepass", "password", "--appendonly", "yes"]


  ports:
    - '7000:6379'

  volumes:
    - redis:/data
    - ./redis/redis.conf:/usr/local/etc/redis/redis.conf
  networks:
    - app-tier

volumes:
  redis:
于 2020-06-08T06:57:53.333 回答
0

我设法从 6379 端口上的另一个容器而不是 7000 连接到 redis,尽管在 compose 文件中这样映射它。

我不得不加载一个 redis.conf 文件,我不得不注释掉

bind 127.0.0.1 

关闭保护模式

protected-mode no

我必须手动从默认配置中删除所有格式错误的键。

现在,我在尝试使用 pubsub 使用 rejson 库从 websocket python 实现传播通道更改时遇到了同样的问题。

自然,来自官方文档频道的代码片段实际上并不起作用。我一直在后悔每天使用redis来保存和传播计数数据,我真的希望我再也不用它了

于 2020-06-04T15:41:55.430 回答