首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Puppet容器不会自动启动

Puppet容器不会自动启动
EN

Stack Overflow用户
提问于 2016-07-12 04:36:28
回答 1查看 84关注 0票数 0

因此,我为证书颁发机构创建了一个傀儡容器。它可以工作,但不能正确启动。这是我的Dockerfile:

代码语言:javascript
复制
FROM centos:6
RUN yum update -y
RUN rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
RUN yum install -y ruby puppet-server  
ADD puppet.conf /etc/puppet/puppet.conf

VOLUME ["/var/lib/puppet/ssl/"]
EXPOSE 9140

#NOTHING BELOW THIS COMMENT RUNS
RUN puppet master --verbose 

CMD service puppetmaster start
CMD chkconfig puppetmaster on
CMD []

然后,我可以通过以下运行启动容器(请注意,我将图像命名为ca-puppet):

代码语言:javascript
复制
docker run -d -p 9140:9140 -it --name ca-puppet \
-v /puppet-host/ssl:/var/lib/puppet/ssl \
ca-puppet bash

问题是,我需要通过docker exec进入容器并运行以下命令来启动它,并在其ssl目录中创建ca证书:

代码语言:javascript
复制
puppet master --verbose 
service puppetmaster start
chkconfig puppetmaster on

我有一种感觉,我应该使用其他一些Docker文件命令来运行最后3个命令。那应该是什么呢?

EN

回答 1

Stack Overflow用户

发布于 2016-07-12 08:43:56

一个Dockerfile中只能有一个CMD指令。如果您列出了多个CMD,则只有最后一个CMD会生效。

也是

如果用户为docker run指定了参数,那么它们将覆盖在CMD中指定的默认值。

然而,在大多数主流发行版中使用Docker中的默认进程管理器(例如,SysV、systemd等)可能会导致问题(不做太多修改)。但是,您通常不需要它--特别是当您只运行一个应用程序时(通常被认为是最佳实践)。在Docker容器中,您通常希望主应用程序是第一个进程(PID1)。

您可以通过不对puppet执行守护进程来完成此操作,并通过以下命令将其作为默认容器命令启动:

CMD puppet master --verbose --no-daemonize

并使用Docker主机进行管理(通过restart策略等)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38315777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档