#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
или похожее, вы должны увидеть, как она запускается. Если вы также хотите экспортировать журнал, вам может понадобиться что-то более причудливое. Как правило, в контейнерном приложении вы должны настроить его для входа непосредственно в стандартный вывод, а не пытаться использовать подобный файл.