我正在使用docker构建一个分为3个服务的小应用程序我有一个JSON服务、一个节点服务器和一个python应用程序。
我总是在一个容器中运行redis进行开发,在第一阶段我运行python脚本和node应用程序,我只是使用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代理使用。根据docker networking,我将其命名为“redis”作为连接的主机名。连接的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'
});
2条答案
按热度按时间m1m5dgzv1#
我已经设法从6379端口上的另一个容器连接到redis,而不是从7000端口连接到redis,尽管在compose文件中Map了redis。
我必须加载一个redis.conf文件,并且必须注解掉
关闭保护模式
我不得不从默认配置中逐个手动删除所有格式错误的密钥。
现在,当我尝试使用pubsub从使用rejson库的websocket python实现传播通道更改时,遇到了相同的问题。
当然,来自官方文档频道的代码片段实际上不起作用。我一直很后悔每天使用redis来保存和传播计数数据,我真的希望以后再也不用使用它了
4xrmg8kj2#
最终,我将配置文件重构为以下设置:
这可能仍然只是一个存根和荒谬的工作量来建立一个开发环境。
docker compose文件中的服务定义如下所示。