2017-02-21 139 views
4

docker-compose.yml似乎工作确定:如何使用Docker Compose连接到Redis容器?

version: '3' 
services: 
    web: 
    image: web-app 
    command: bundle exec rackup 
    ports: 
    - "9292:9292" 
    links: 
     - redis 
    redis: 
    image: redis 

命令:

docker build -t web-app .; docker-compose up 

的Web应用程序期待一个REDIS_URL配置。 Web应用程序Dockerfile:

ENV REDIS_URL redis:6379 

看来,Web应用程序无法连接到Redis的:

Redis::CannotConnectError - Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED): 

那么,什么是Redis的URL为Web应用程序?

我需要公开Redis端口(6379)吗?

编辑:

感谢@Andy希恩,我看到Redis的网址应为redis://6379
现在我得到Errno::EINVAL - Invalid argument - connect(2) for 0.0.24.235:6379。这可能与Redis v 3.2.8有关。我会尝试另一个版本,看看它是否有效。

编辑#2:

3.2.8正常工作与我的本地机器上的应用程序,所以这不是问题。

+0

redis是否正在运行?如果你全部启动它们,然后重新启动'web',会发生什么 - >这样你就知道'redis'已经启动了。 – Nanne

+2

这个错误表明'web'服务试图连接到本地IP(127.0.0.1)的redis,而不是'REDIS_URL',它应该是链接中的'redis' DNS名称。这是什么类型的应用程序?它是否被设计为使用'REDIS_URL'?这将有助于更多地了解应用程序('Dockerfile',它如何使用'REDIS_URL'等)。 –

+0

是的,它被配置为使用'REDIS_URL'。这是一个Sinatra应用程序。其他配置工作,生产有一个'REDIS_URL'。 –

回答

7

问题是redis是将在Dockerfile中插入的“变量”。

ENV REDIS_URL redis:6379 

但Redis的URL应与字面redis开始。

因此,修复程序更新泊坞窗撰写:

redis_db: 
    image: redis:3.2.8 

所需的配置是:

REDIS_URL=redis://redis_db:6379 

感谢BMitch和安迪·希恩帮助我弄清楚了这一点。

+0

FWIW,Mongo URL可以有相同的问题,因为它们以'mongodb://'开头。 –

+0

你知道REDIS_URL如何设置密码吗? –

相关问题