无法在Docker容器内自动启动jenkins

我写了一个dockerfile来使用厨师在容器中安装jenkins。

我成功安装,但jenkins不会自动启动。 我在dockerfile中实现了CMD命令,但是无法执行。

我跟着发表了一些文章,但没有在我的情况下工作

dockerfile:

FROM centos:6 RUN yum -y update RUN yum -y install wget RUN yum -y install httpd RUN wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins- ci.org/redhat/jenkins.repo RUN rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key RUN yum -y install java RUN yum -y install jenkins CMD service jenkins start && tail -F /var/log/jenkins/jenkins.log 

厨师食谱:

 include_recipe 'docker' docker_node_data = '/tmp/docker1' directory docker_node_data do action :create end cookbook_file "#{docker_node_data}/Dockerfile" do source 'Dockerfile' end docker_image 'jenkins7' do tag 'latest' source docker_node_data action :build end docker_container 'jenkins7' do detach true command 'top -b -d 5' port '8080:8080' action :run end 

这实际上并不是Docker的工作原理。 你不会在容器中运行一个服务,你会运行一个进程。 容器本身就是一项服务。 在这种情况下,您使用Chef作为您的服务经理,这可能是一个坏主意。 不幸的是,Docker并不适合这种pipe理。 Right™解决scheme很可能会转向无用的应用领域(具体而言,您可能需要使用rkt来容纳jenkins,以便像Chef一样设置systemd / Upstart / Supervisord / Runit服务作业)。

回答更直接的问题:您的基本映像是使用Upstart的CentOS 6。 Upstart无法在Docker内部运行,因为它想要成为真正的PID 1,并拥有几乎所有的原始级别访问权限。 如果你改变你的入口点命令是更像java -jar /path/to/jenkins.war或类似的东西,你应该看到它开始。 如果你还想要日志导出,你可能需要一些更奇特的东西。 通常与一个容器化的应用程序,你会configuration它直接login到标准输出,而不是试图尾巴这样的文件。