我正在编写一个基于微服务的小型应用程序,其中有一个redis实例,一些 ruby 代码/容器可以通过Resque访问。目前在我的docker compose中,我像这样链接:
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 cloud的过程中所做的事情),它将找不到redis服务器。到目前为止,我总共有3个容器连接到此Redis以进行重新排序。一个小的sinatra前端,和2个 worker 。我不是一个铁杆的人,并且在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"
最佳答案
不要使用那些链接环境变量,它们已被弃用,并且它们不再存在于用户定义的网络中。
一个好的方法是首先默认使用名称hostname redis
。您始终可以为任何服务加上别名以使用该名称,因此几乎不需要更改默认名称。例如:
links:
- someservice:redis
要覆盖默认值,您可以创建一些特定于应用程序的env var,例如
REDIS_HOSTNAME
,并从环境部分进行设置(但再次声明,这几乎是没有必要的):environment:
REDIS_HOSTNAME=foo
关于ruby - 将Redis链接到Sinatra Docker容器的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35735831/