我写了一个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
答案 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而不是尝试拖动这样的文件。