无法在docker容器内以auctomatically方式启动jenkins

时间:2016-10-06 09:38:09

标签: jenkins docker chef

我写了一个dockerfile,用于使用chef安装容器内的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

1 个答案:

答案 0 :(得分:4)

这不是Docker的工作原理。您不会在容器内运行服务,您将运行一个进程。容器本身服务。在这种情况下,您使用Chef作为您的服务经理,这可能是一个坏主意。不幸的是,Docker并不适合这种管理。 Right™解决方案可能正在转向无用的答案领域(特别是你可能想要更像Chef使用rkt设置systemd / Upstart / Supervisord / Runit服务工作来容纳jenkins)。

要回答更直接的问题:您的基本图像是使用Upstart的CentOS 6。 Upstart无法在Docker中运行,因为它希望成为真正的PID 1并且几乎可以对所有内容进行原始级别的访问。如果您将entrypoint命令更改为更像java -jar /path/to/jenkins.war或更类似的命令,您应该看到它开始。如果你也想要日志导出,你可能需要更高级的东西。通常使用容器化应用程序,您可以将其配置为直接登录到stdout而不是尝试拖动这样的文件。