2015-01-19 2 views
3

Я развернул простое приложение nodejs на основе redis в цифровом облаке океана.не удалось связать контейнер redis с контейнером node.js в докере

Приложение 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, а затем запустить приложение на node app.js.

Но я получил сообщение об ошибке сказав:

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

Как Redis контейнер подвергается 6379, и мой nodejs контейнер ссылок на Redis контейнер. в моем приложении node.js, подключение к серверу localhost redis с портом 6379 должно быть в порядке, поэтому на самом деле оно вообще не работает

ответ

3

Когда вы связываете контейнер redis с контейнером узла, докер уже будет изменять файл хостов для вас

затем вы должны иметь возможность подключения к контейнеру 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 

Это свяжет новый веб-контейнер с контейнером db, который вы создали ранее. --link флаг принимает вид:

--link name:alias 

Где имя является именем контейнера мы ссылаетесь и псевдоним является псевдонимом для имени ссылки. Вы увидите, как этот псевдоним будет использоваться в ближайшее время.

+0

Не могли бы вы объяснить, почему докер в этом случае не создает переменные среды, такие как 'process.env.REDIS_PORT_6379_TCP_ADDR'? – pietrovismara

Смежные вопросы