2017-02-21 77 views
2

我有一個西納特拉的應用程序,在碼頭工人正常工作:如何將Redis添加到Docker容器?

# Image 
FROM ruby:2.3.3 
RUN apt-get update && \ 
    apt-get install -y net-tools 


# Install app 
ENV APP_HOME /app 
ENV HOME /root 
RUN mkdir $APP_HOME 
WORKDIR $APP_HOME 
COPY Gemfile* $APP_HOME/ 
RUN bundle install 
COPY . $APP_HOME 


# Configure App 
ENV LANG en_US.UTF-8 
ENV RACK_ENV production 

EXPOSE 9292 


# run the application 
CMD ["bundle", "exec", "rackup"] 

但是當我嘗試添加的Redis:

# Redis 
RUN   apt-get update && apt-get install -y redis-server 
EXPOSE  6379 
CMD   ["/usr/bin/redis-server"] 

的Redis似乎沒有啓動。

那麼,將Redis添加到Ruby(FROM ruby:2.3.3)Docker容器的好方法是什麼?

回答

2

將其拆分爲兩個容器。您可以使用docker-compose將它們置於通用網絡上。例如。這裏有一個樣本泊塢窗,compose.yml:

version: '2' 

services: 
    sinatraapp: 
    image: sinatraapp:latest 
    ports: 
    - 9292:9292 
    redis: 
    image: redis:latest 

以上可以包括你的環境更多的選擇,並假定你的形象的名字是sinatraapp:最新的,即更改爲您構建的圖像。您還需要更新您的sinatra應用程序,以通過主機名redis而不是localhost調用redis。然後運行docker-compose up -d啓動這兩項服務。

+0

是的,我看到用這種方式做起來更容易,更好。 –

+0

對於未來的搜索者,'redis'鍵在這種情況下不起作用。請參閱http://stackoverflow.com/a/42380642/336920 –

1

There can be only oneCMD命令在您的Dockerfile。此外,你想要做的是比你想象的little more complex

P.S.以上是stackoverflow鏈接。

+0

看起來「Docker方式」將有2個容器。更簡單,更輕鬆。 –

+0

是的,如果您沒有任何嚴重的併發症,這是正確和最簡單的方法。 – alkis

相關問題