首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从码头集装箱连接到redis

无法从码头集装箱连接到redis
EN

Stack Overflow用户
提问于 2018-08-16 14:43:30
回答 2查看 2.3K关注 0票数 0

下面的/Following来自docker-come.yml文件/

代码语言:javascript
复制
version: "3"
services:
  app:
    container_name: app
    restart: always
    build: .
    ports:
      - "3006:3006"
    # deploy:
    #   mode: replicated
      #replicas: 6
    networks: 
      - overlay
    depends_on:
      - redis
      - mongo
      - mysql
    links:
      - mongo
      - redis
      - mysql
  mongo:
    container_name: mongo
    networks: 
      - overlay
    image: mongo
    volumes:
      - ./data:/data/db
    ports:
      - "27017:27017"
  redis:
    image: redis:latest
    networks: 
      - overlay
    volumes:
      - ./data:/redisdata/redisdb
    ports:
      - "6379:6379"
    logging:
      driver: "json-file"
      options:
        max-size: "100MB"
        max-file: "3"
  mysql:
    image: mysql:latest
    networks: 
     - overlay
    ports: 
    - "3307:3307"
    environment:
      - 'MYSQL_ROOT_PASSWORD=******'
      - 'MYSQL_DATABASE=iconnect_test_demo'
      - 'MYSQL_USER=root'
      - 'MYSQL_PASSWORD=******'
networks:
 overlay:

在执行上述docker-compose.yml文件时,所有4个容器都被创建,但无法连接到redis数据库,获得以下exception.Tried,用localhost替换redis,但仍然没有luck.But,如果我在对接器之外独立运行节点程序,它将连接到依赖于容器内部的redis数据库。

其结果是在执行期间出现以下错误。

代码语言:javascript
复制
[ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379
app      |     at Object.exports._errnoException (util.js:1050:11)
app      |     at exports._exceptionWithHostPort (util.js:1073:20)
app      |     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1093:14)

Complete Error Log is pasted in below url.
https://pastebin.com/0NvC3nz6

In Node File trying to connect to redis server in the following way.

var Redis = require('ioredis'); 
var redisadapter = require('socket.io-redis');


/* For maintaining connectivity across the multiple nodes */
io.adapter(redisadapter({ host: 'redis', port: 6379 }));
#io.adapter(redisadapter({ host: 'localhost', port: 6379 }));
server.listen(3006);
console.log("server running on 3006");

/* Redis configuration */
var redis_address = 'redis://redis:6379';
#var redis_address = 'redis://localhost:6379';
var redis = new Redis(redis_address);

redis.on('ECONNREFUSED', function(err) {    
  logger.error('Redis error: ' + err);
} );

/Docker文件/

代码语言:javascript
复制
FROM node:7
WORKDIR /app
COPY . /app
CMD node server1.js
EXPOSE 3006
EN

回答 2

Stack Overflow用户

发布于 2018-08-16 19:16:36

如果您查看日志文件中的这个特定行:

代码语言:javascript
复制
app      | [ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379

它告诉您,应用程序容器无法连接到redis容器。redis实例的IP地址是端口6379上的127.0.0.1。但是,在这里,您的redis服务器不是在应用程序容器上运行,而是在redis容器上运行。您的代码或配置有问题。有关更多详细信息,请查看您使用的库的文档。此外,请确保每次您在代码中更改某些内容时都会重新生成应用程序停靠器图像!

票数 2
EN

Stack Overflow用户

发布于 2018-08-16 14:54:00

就像我在can't connect to redis through node app, both in dockers上读到的

初始化对象应执行如下操作

代码语言:javascript
复制
const Redis = require('ioredis');
const redis = new Redis({ host: 'redis' });

(删除redis://前缀并添加host:作为对象键)

如果不起作用,尝试添加redis容器名称并按其名称调用它。

代码语言:javascript
复制
container_name: svc-redis

并将主机配置为svc-redis:6379

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51879753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档