将redis链接到sinatra docker容器的正确方法

我正在写一个基于微型服务的小应用程序,并且在其中有一个redis实例,通过Resque可以使用一些ruby代码/容器。 目前在我的泊坞窗撰写我连接像这样:

redis: image: redis:latest ports: - '6379:6379' ruby_worker: image: my_user/my_image:latest links: - redis:db 

这工作正常(我只把它命名为:db现在的原因,这是我查找链接时发现的示例)。
在我的ruby代码中,我必须设置我的Resque redis服务器,如:

 Resque.redis = ENV['DB_PORT_6379_TCP_ADDR'] + ':6379' 

但是这似乎并不正确。 它依赖于这个确切的redis名称,如果我必须启动一个不同的redis实例(就像我今天在使用docker云时所做的那样),它不会findredis服务器。 总共我有3个容器(到目前为止)连接到这个redis的resque。 一个小的sinatra前端,和2名工人。 我不是一个铁杆的人,3天前从来没有使用过复苏。 所以很抱歉,如果我错过了一些基本知识。

有没有更好的方法来连接到我的ruby代码中的redis实例? 有没有办法在我的docker-composose中传递redis的名字? 现在我的resque-web容器configuration如下,它似乎工作正常:

 resque: image: ennexa/resque-web links: - redis:redisserver ports: - "5678:5678" command: "-r redis://redisserver:6379" 

不要使用这些链接环境variables,它们已被弃用,并且不再存在于用户定义的networking中。

一个好的方法是首先默认名称主机名redis 。 你可以随意别名任何服务来获得这个名字,所以你应该几乎永远不需要改变它的默认值。 例如:

 links: - someservice:redis 

要覆盖缺省值,可以像创buildREDIS_HOSTNAME一样创build一些特定于应用程序的env var,并从环境部分设置它(但是几乎不需要):

 environment: REDIS_HOSTNAME=foo