当前位置: 首页 > 面试题库 >

在Docker容器中自动运行服务

支淮晨
2023-03-14
问题内容

我正在设置一个简单的图像:包含Riak(一个NoSQL数据库)的图像。该映像以riak startCMD形式启动Riak服务。现在,如果我使用将该程序作为守护程序运行docker run -d quintenk/riak- dev,它将启动Riak进程(我可以在日志中看到它)。但是,它会在几秒钟后自动关闭。如果我使用docker run -i -t quintenk/riak-dev /bin/bashriak进程未启动运行它(更新:对此的解释,请参见答案)。实际上,根本没有任何服务在运行。我可以使用终端手动启动它,但是我希望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的说明,-f在CMD中更改为-F

与Docker合作一段时间后,我养成了使用超级用户调整流程的习惯。如果您想要示例代码,请查看https://github.com/Krijger/docker-
cookbooks
。我将我的主管图像用作所有其他图像的基础。我在这里使用主管写博客。


问题答案:

要使Docker容器保持运行状态,您需要在前台保持活动状态。

因此,您可以将Dockerfile中的最后一行替换为

CMD /bin/riak console

甚至

CMD /bin/riak start && tail -F /var/log/riak/erlang.log.1

请注意,您不能有多行CMD语句,只能运行最后一个。



 类似资料:
  • 我有一个Dockerfile来在容器中安装MySQL server,然后我这样开始: 但MySQL服务不会自动启动,我必须手动运行(从容器内): 如何在运行docker容器时自动启动MySQL服务?

  • 问题内容: 我有一个Dockerfile将MySQL服务器安装在一个容器中,然后我开始像这样: 但是MySQL服务不会自动启动,我必须手动运行(从容器内部): 运行docker容器时如何自动启动MySQL服务? 问题答案: 首先,有一个 问题, 在您的: Docker映像不会保存正在运行的进程。因此,您的命令仅在阶段执行,并在构建完成后停止。相反,您需要使用或如下所示的命令在启动容器时指定命令:

  • 我有一个php docker容器,我的Symfony项目在哪里。 这是我的docker-compose.yml 我想使用以下命令启动我的symfony项目: 但当我想访问url时,它不起作用。我收到以下错误消息: localhost页不行 localhost未发送任何数据。 我该怎么解决这个问题? PS:我用docker for mac 和输出: [2016-08-06 14:09:53]php.

  • 我想将 作为容器运行,并希望让其他微服务稍后注册到此容器。但是我遇到了一些问题,让它作为容器运行并访问它。应用程序在 STS 中运行没有问题。当我在STS中执行它时,我可以使用访问。 < code>application.java: > < li >运行< code>mvn包 运行驱逐任务 通知 大约每分钟返回一次。如果我尝试在浏览器中使用 调用 ,它说我无法访问此页面。当我使用 ctrl c 结

  • 问题内容: 我在CI和CD上创建了Jenkinsfile,Dockerfile,Dockerfile.test到CI和CD,在GitHub上构建了我的服务器API,我在Jenkins上构建了该构建,并且构建成功,并且我的docker在Jenkinsfile阶段也在容器上运行,我创建了用于测试和部署在服务器API上,并使用docker作为容器 我也使用docker-compose在docker上运行

  • 问题内容: 我在Docker容器中安装了Jenkins,但它不会自动运行。我必须运行/etc/init.d/jenkins start。然后一切都变得顺畅而美好。我遵循的所有教程都说,安装后应默认运行,但不是。 有什么想法吗? 问题答案: 如果你喜欢在各种詹金斯图像的Dockerfile(如官方一个),你会发现为什么詹金斯“自动运行”: ( 是用于采用僵尸进程的脚本,这是我之前在“ [ ”中介绍的