Невозможно запустить jenkins автоматически внутри контейнера docker

#jenkins #docker #chef-infra

#дженкинс #docker #шеф-повар-инфра

Вопрос:

Я написал dockerfile для установки jenkins внутри контейнера с помощью chef.

Я успешно установил, но jenkins не запускается автоматически. Я реализовал команду CMD в dockerfile, но не смог этого сделать.

Я следил за несколькими статьями, опубликованными на эту тему, но в моем случае это не сработало

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 amp;amp; 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. Не уверен, поможет ли это… nickhudacin.wordpress.com/2016/09/21 /…

Ответ №1:

На самом деле это не так, как работает Docker. Вы бы не запускали службу внутри контейнера, вы бы запустили процесс. Сам контейнер является сервисом. В этом случае вы используете Chef в качестве менеджера службы, что, вероятно, является плохой идеей. К сожалению, Docker не подходит для такого управления. Решение Right ™, вероятно, отклоняется от бесполезной области ответов (в частности, вы, вероятно, хотите что-то вроде Chef, настраивающего задание службы systemd / Upstart / Supervisorord / Runit с использованием rkt для контейнеризации jenkins).

Чтобы ответить на более насущный вопрос: ваш базовый образ — CentOS 6, который использует Upstart. Upstart не способен работать внутри Docker, потому что он хочет быть истинным PID 1 и иметь доступ на уровне raw практически ко всему. Если вы измените свою команду entrypoint на что-то более похожее java -jar /path/to/jenkins.war или похожее, вы должны увидеть, как она запускается. Если вы также хотите экспортировать журнал, вам может понадобиться что-то более причудливое. Как правило, в контейнерном приложении вы должны настроить его для входа непосредственно в стандартный вывод, а не пытаться использовать подобный файл.