2017-02-21 126 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