将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