Docker - 无法启动Redis服务

时间:2015-06-05 03:00:34

标签: redis docker

我正在安装Redis,设置init.d,将redis.conf放在init.d旁边。

然后使用CMD service init.d start启动Redis

但是,Redis-Server无法启动,并且日志文件中没有迹象表明服务无法启动。

  1. 安装Redis并将redis.conf置于etc/init.d文件夹
  2. 命令:

    # add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
    RUN groupadd -r redis && useradd -r -g redis redis
    
    RUN apt-get update  > /dev/null \
        && apt-get install -y curl > /dev/null 2>&1 \
        && rm -rf /var/lib/apt/lists/* > /dev/null 2>&1
    
    # grab gosu for easy step-down from root
    RUN gpg --keyserver pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4
    RUN curl -o /usr/local/bin/gosu -SL "https://github.com/tianon/gosu/releases/download/1.2/gosu-$(dpkg --print-architecture)" > /dev/null 2>&1 \
        && curl -o /usr/local/bin/gosu.asc -SL "https://github.com/tianon/gosu/releases/download/1.2/gosu-$(dpkg --print-architecture).asc" > /dev/null 2>&1 \
        && gpg --verify /usr/local/bin/gosu.asc  > /dev/null 2>&1 \
        && rm /usr/local/bin/gosu.asc  > /dev/null 2>&1 \
        && chmod +x /usr/local/bin/gosu  > /dev/null 2>&1
    
    ENV REDIS_VERSION 3.0.1
    ENV REDIS_DOWNLOAD_URL http://download.redis.io/releases/redis-3.0.1.tar.gz
    ENV REDIS_DOWNLOAD_SHA1 fe1d06599042bfe6a0e738542f302ce9533dde88
    
    # for redis-sentinel see: http://redis.io/topics/sentinel
    RUN buildDeps='gcc libc6-dev make'; \
         set -x \
        && apt-get update > /dev/null && apt-get install -y $buildDeps --no-install-recommends > /dev/null 2>&1 \
        && rm -rf /var/lib/apt/lists/* > /dev/null 2>&1 \
        && mkdir -p /usr/src/redis > /dev/null 2>&1 \
        && curl -sSL "$REDIS_DOWNLOAD_URL" -o redis.tar.gz > /dev/null 2>&1 \
        && echo "$REDIS_DOWNLOAD_SHA1 *redis.tar.gz" | sha1sum -c - > /dev/null 2>&1 \
        && tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 > /dev/null 2>&1 \
        && rm redis.tar.gz > /dev/null 2>&1 \
        && make -C /usr/src/redis > /dev/null 2>&1 \
        && make -C /usr/src/redis install > /dev/null 2>&1 \
       && cp /usr/src/redis/utils/redis_init_script /etc/init.d/redis_6379
        && rm -r /usr/src/redis > /dev/null 2>&1 \
        && apt-get purge -y --auto-remove $buildDeps > /dev/null 2>&1
    
    RUN mkdir /data && chown redis:redis /data
    VOLUME [/data]
    WORKDIR /data
    
    1. CMD Service init.d start
    2. 命令:

      RUN touch /var/redis/6379/redis-6379-log.txt
      RUN chmod 777 /var/redis/6379/redis-6379-log.txt
      ENV REDISPORT 6379
      ADD $app$/redis-config.txt /etc/redis/$REDISPORT.conf
      CMD service /etc/init.d/redis_6379 start 
      

      如果我使用shellinabox访问容器,并且我输入

        

      /etc/init.d/redis_6379开始

      Redis服务器将启动,但它不会在dockerfile中启动。这是为什么?

      似乎你不能使用后台进程,而是需要一些名为supervisord的东西。

      安装:

      RUN apt-get install -y supervisor
      RUN mkdir -p /var/log/supervisor
      ADD $app$/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
      CMD /usr/bin/supervisord
      

      配置文件:

      [supervisord]
      nodaemon=true
      
      [program:shellinabox]
      command=/bin/bash -c "cd /tmp && exec /opt/shellinabox/shellinaboxd --no-beep --service ${service}"
      
      [program:redis-server]
      command=/bin/bash -c "redis-server /etc/redis/${REDISPORT}.conf"
      

      执行命令后,会启动shelllinabox和redis-server两个程序。

      感谢大家的帮助!

1 个答案:

答案 0 :(得分:2)

通常,您无法在Docker容器中使用init脚本。这些脚本通常用于在后台启动服务"这意味着即使服务启动,脚本也会最终退出。

如果这是Docker容器中的第一个进程,Docker将看到它退出,这将导致它清理容器。您需要安排redis在容器中的前台运行,或者您需要安排在容器中运行某种过程主管。

考虑查看official resource container以查看设置方法。您可以在github repository

中查看Dockerfiles