【发布时间】:2018-03-22 16:28:10
【问题描述】:
我正在设置一个简单的图像:一个包含 Riak(一个 NoSQL 数据库)的图像。该映像以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
编辑: -f 根据 sesm 他的评论在 CMD 中更改为 -F
我自己的答案
在使用 Docker 一段时间后,我养成了使用 supervisord 调整进程的习惯。如果您想要示例代码,请查看https://github.com/Krijger/docker-cookbooks。我使用我的主管图像作为我所有其他图像的基础。我在博客上使用主管here。
【问题讨论】:
-
顺便说一句。我现在(出于开发目的)通过启动容器、附加到它,然后启动 Riak 命令行来使用容器。