下面的/Following来自docker-come.yml文件/
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数据库。
其结果是在执行期间出现以下错误。
[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文件/
FROM node:7
WORKDIR /app
COPY . /app
CMD node server1.js
EXPOSE 3006发布于 2018-08-16 19:16:36
如果您查看日志文件中的这个特定行:
app | [ioredis] Unhandled error event: Error: connect ECONNREFUSED 127.0.0.1:6379它告诉您,应用程序容器无法连接到redis容器。redis实例的IP地址是端口6379上的127.0.0.1。但是,在这里,您的redis服务器不是在应用程序容器上运行,而是在redis容器上运行。您的代码或配置有问题。有关更多详细信息,请查看您使用的库的文档。此外,请确保每次您在代码中更改某些内容时都会重新生成应用程序停靠器图像!
发布于 2018-08-16 14:54:00
就像我在can't connect to redis through node app, both in dockers上读到的
初始化对象应执行如下操作
const Redis = require('ioredis');
const redis = new Redis({ host: 'redis' });(删除redis://前缀并添加host:作为对象键)
如果不起作用,尝试添加redis容器名称并按其名称调用它。
container_name: svc-redis并将主机配置为svc-redis:6379
https://stackoverflow.com/questions/51879753
复制相似问题