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

iam*_*unk 2 chef-infra jenkins docker

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

我安装成功,但 jenkins 没有自动启动。我在 dockerfile 中实现了 CMD 命令,但无法做到。

我关注了一些关于此的文章,但在我的情况下不起作用

码头档案:

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
Run Code Online (Sandbox Code Playgroud)

厨师食谱:

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
Run Code Online (Sandbox Code Playgroud)

cod*_*ger 5

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

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