无法将redis容器链接到docker中的node.js容器

时间:2015-01-19 08:53:43

标签: node.js redis docker

我在数字海洋云上部署了一个简单的基于redis的nodejs应用程序。

这是node.js应用程序。

var express = require('express');
var app = express();   
app.get('/', function(req, res){
  res.send('hello world');
});
app.set('trust proxy', 'loopback') 
app.listen(3000);

var redisClient = require('redis').createClient(6379,'localhost');
redisClient.on('connect',function(err){
   console.log('connect');
})

为了部署应用程序,我分别使用了一个node.js容器和一个redis容器,并将node.js容器与redis容器链接在一起。

可以通过

获得redis容器
docker run -d --name redis -p 6379:6379 dockerfile/redis

并且node.js容器基于google / nodejs,其中Dockerfile就像

一样
FROM google/nodejs
WORKDIR   /src
EXPOSE  3000
CMD ["/bin/bash"]

我的node.js图像被命名为nodejs并由

构建
docker build -t nodejs Dockerfile_path

通过将我的主机应用程序文件复制到容器中的src文件夹并链接现有的redis容器来运行容器

docker run -it --rm -p 8080:3000 --name app -v node_project_path:/src --link redis:redis nodejs

最后我成功进入容器,然后按npm install安装了npm模块,然后按node app.js启动应用程序。

但我得到一个错误说:

Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED

当redis容器暴露给6379时,我的nodejs容器正在链接到redis容器。在我的node.js应用程序中,使用端口6379连接到localhost redis服务器应该没问题,为什么它实际上根本不起作用

1 个答案:

答案 0 :(得分:2)

将redis容器链接到节点容器时,docker已经为您修改了hosts文件

然后您应该可以通过以下方式连接到redis容器:

var redisClient = require('redis').createClient(6379,'redis'); // 'redis' is alias for the link -> what's in the hosts file.

来自:https://docs.docker.com/userguide/dockerlinks/

$ sudo docker run -d -P --name web --link db:db training/webapp python app.py
  

这将链接新的Web容器与您之前创建的db容器。 --link标志采用以下形式:

--link name:alias
  

其中name是我们要链接的容器的名称,别名是链接名称的别名。您将很快看到该别名的使用方式。