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

时间:2016-03-01 23:41:36

标签: ruby docker sinatra resque docker-compose

我正在编写一个基于微服务的小应用程序,在其中我有一个redis实例,一些ruby代码/容器访问用于通过Resque。目前在我的docker compose中,我正如此链接:

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

这很好用(我只命名它:db for now因为这是我在查找链接时找到的例子) 在我的ruby代码中,我必须设置我的Resque redis服务器,如:

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

但这似乎并不合适。这取决于确切的redis名称,如果我必须启动一个不同的redis实例(就像我今天玩docker cloud时的做法一样),它也找不到redis服务器。总共我有3个容器(到目前为止)连接到这个redis用于resque。一个小的sinatra为基础的前端,和2名工人。我不是一个铁路人,并且从未在3天前使用过resque。很抱歉,如果我错过了一些基础知识。

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

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

1 个答案:

答案 0 :(得分:0)

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

执行此操作的好方法是首先默认使用名称hostname redis。您始终可以将任何服务别名为具有该名称,因此您几乎不需要从默认值更改它。例如:

links:
  - someservice:redis

要覆盖默认值,您可以创建一些特定于应用程序的env var,如REDIS_HOSTNAME,并从环境部分设置它(但同样,这几乎不需要):

environment:
    REDIS_HOSTNAME=foo