木偶容器不会自动启动

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

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):

 docker run -d -p 9140:9140 -it --name ca-puppet \ -v /puppet-host/ssl:/var/lib/puppet/ssl \ ca-puppet bash 

问题是,我需要docker exec到容器中,并运行以下命令启动并在其ssl目录中创buildca证书:

 puppet master --verbose service puppetmaster start chkconfig puppetmaster on 

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

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

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

但是,在大多数主stream发行版中使用Docker中默认的进程pipe理器(例如,SysV,systemd等)可能会导致问题(无需进行大量修改)。 但是,通常不需要它,特别是如果只运行一个应用程序(通常被认为是最佳实践)。 在Docker容器中,通常希望主应用程序成为第一个进程(PID 1)。

你可以通过不守护木偶,并通过类似下面的命令启动它作为默认的容器命令:

CMD puppet master --verbose --no-daemonize

并使用Docker主机来pipe理它(通过restart策略等)。