我正在设置一个简单的镜像:其中包含Riak(一种NoSQL数据库)。该镜像使用
因此,运行/重新启动容器应自动启动Riak。如何正确设置?
下面是Dockerfile,可用于创建该镜像(更新:使用所选答案进行了修改):
riak start
作为CMD启动Riak服务。现在,如果我使用docker run -d quintenk/riak-dev
命令将其作为守护进程运行,它确实会启动Riak进程(我可以在日志中看到)。然而,它会在几秒钟后自动关闭。如果我使用docker run -i -t quintenk/riak-dev /bin/bash
命令运行它,则不会启动riak进程(更新:请参见答案以获取解释)。事实上,根本没有任何服务在运行。我可以在终端上手动启动它,但我希望Riak能够自动启动。我认为这种行为也会发生在其他服务上,Riak只是一个例子。因此,运行/重新启动容器应自动启动Riak。如何正确设置?
下面是Dockerfile,可用于创建该镜像(更新:使用所选答案进行了修改):
FROM ubuntu:12.04
RUN apt-get update
RUN apt-get install -y openssh-server curl
RUN curl http://apt.basho.com/gpg/basho.apt.key | apt-key add -
RUN bash -c "echo deb http://apt.basho.com precise main > /etc/apt/sources.list.d/basho.list"
RUN apt-get update
RUN apt-get -y install riak
RUN perl -p -i -e 's/(?<=\{http,\s\[\s\{")127\.0\.0\.1/0.0.0.0/g' /etc/riak/app.config
EXPOSE 8098
CMD /bin/riak start && tail -F /var/log/riak/erlang.log.1
编辑:根据sesm的建议,CMD中的-f更改为-F。
我的回答
在使用Docker一段时间后,我养成了使用supervisord运行进程的习惯。如果您需要示例代码,请查看https://github.com/Krijger/docker-cookbooks。我将我的supervisor映像用作所有其他映像的基础。我在这里写了关于使用supervisor的博客here。