2016-03-01 76 views
1

我正在編寫一個基於微型服務的小應用程序,並在其中有一個redis實例,通過Resque可以使用一些ruby代碼/容器。目前在我的搬運工撰寫我的連接,像這樣:將redis鏈接到sinatra docker容器的正確方法

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

這工作得很好(我只將其命名爲:分貝導致現在是仰視鏈接,當我發現的例子)。
在我的Ruby代碼,我建立我Resque Redis的服務器,如:

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

但這只是看起來不正確。它依賴於這個確切的redis名稱,如果我必須啓動一個不同的redis實例(就像我今天在玩docker雲的時候所做的那樣),它沒有找到redis服務器。總共我有3個容器(到目前爲止)連接到這個redis進行恢復。一個小型的sinatra前端,和2名工人。我不是一個鐵桿的人,並且在3天前從未使用過復甦。非常抱歉,如果我錯過了一些基本知識。

有沒有更好的方法來連接到我的紅寶石代碼中的redis實例?有沒有辦法在我的docker-composose中傳遞redis名稱?現在我resque-Web容器下方配置一樣,它似乎很好地工作:

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

回答

0

不要使用這些鏈接的環境變量,它們被棄用,他們並不在用戶定義的網絡存在了。

這樣做的一個好方法是首先默認名稱主機名redis。你總是可以將任何服務都別名爲這個名稱,所以你應該幾乎不需要從默認值改變它。例如:

links: 
    - someservice:redis 

要覆蓋默認設置,你可以創建一些應用特定的環境變量像REDIS_HOSTNAME,並與環境部設置(再次但是,這是幾乎從來沒有必要):

environment: 
    REDIS_HOSTNAME=foo 
相關問題