我正在编写一个基于微服务的小应用程序,在其中我有一个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"
答案 0 :(得分:0)
不要使用这些链接环境变量,它们已被弃用,并且它们不再存在于用户定义的网络中。
执行此操作的好方法是首先默认使用名称hostname redis
。您始终可以将任何服务别名为具有该名称,因此您几乎不需要从默认值更改它。例如:
links:
- someservice:redis
要覆盖默认值,您可以创建一些特定于应用程序的env var,如REDIS_HOSTNAME
,并从环境部分设置它(但同样,这几乎不需要):
environment:
REDIS_HOSTNAME=foo