Дженкинс не запускается в докере (включая Dockerfile) - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь создать простое приложение с Дженкинсом в док-контейнере.У меня есть следующий Dockerfile:

FROM ubuntu:trusty

# Install dependencies for Flask app.
RUN sudo apt-get update
RUN sudo apt-get install -y vim
RUN sudo apt-get install -y curl 
RUN sudo apt-get install -y python3-pip
RUN pip3 install flask

# Install dependencies for Jenkins (Java).
        # Install Java 1.8.
RUN sudo apt-get install -y python-software-properties debconf-utils
RUN sudo apt-get install -y software-properties-common
RUN sudo add-apt-repository -y ppa:webupd8team/java
RUN sudo apt-get update
RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | sudo debconf-set-selections
RUN sudo apt-get install -y oracle-java8-installer
        # Install, start Jenkins.
RUN sudo apt-get install -y wget
RUN wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | apt-key add -
RUN echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list
RUN sudo apt-get update
RUN sudo apt-get install -y jenkins
RUN sudo /etc/init.d/jenkins start

COPY ./app /app

CMD ["python3","/app/main.py"]

Я запускаю этот контейнер со следующим:

docker build -t jenkins_test .
docker run --name jenkins_test_container -tid -p 5000:5000 -p 8080:8080 jenkins_test:latest

Я могу запустить флешку и установить Jenkins, однако при запуске Jenkins не работаетБег.curl localhost:8080 не удалось.

В выводе журнала я вижу:

Correct java version found
 * Starting Jenkins Automation Server jenkins [ OK ] 

Однако он все еще не работает.

Я могу в ssh войтиконтейнер и вручную запустите sudo /etc/init.d/jenkins start, чтобы запустить его, но я хочу, чтобы он запускался на docker run или docker build.

Я также попытался поместить sudo /etc/init.d/jenkins start в часть CMD Dockerfile:

CMD python3 /app/main.py; sudo /etc/init.d/jenkins start

С этим я могу свернуть Flask, но все еще не Дженкинс.

Как заставить Дженкинс запускаться автоматически?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Я смог заставить это работать, только запустив Jenkins в части CMD, но мне нужно было запустить Jenkins до Flask, поскольку Flask будет работать непрерывно и следующая команда никогда не будет выполняться:

Не сделалработа:

CMD python3 /app/main.py; sudo /etc/init.d/jenkins start

Это сработало:

CMD sudo /etc/init.d/jenkins start; python3 /app/main.py

РЕДАКТИРОВАТЬ:

Я считаю, что положить его в часть RUN не будетработать, потому что контейнер будет собирать, но не сохранять запущенные сервисы.Я не уверен, что контейнеры могут быть сохранены и загружены такими запущенными процессами, но я могу ошибаться.Буду признателен за разъяснение, если так.

Кажется, что должен быть в RUN, поэтому, если кто-то знает, почему это не сработало или какие-то передовые практики, будет также признателен за информацию.

0 голосов
/ 23 февраля 2019

У вас есть несколько моментов, о которых вам нужно знать:

  1. Нет необходимости использовать sudo, поскольку по умолчанию пользователь уже является пользователем root.
  2. Для запуска несколькихДля обслуживания в том же контейнере вам необходимо использовать любой вид менеджера сервисов, например Supervisord .Jenkins не работает, потому что CMD является основной точкой входа для вашего контейнера, поэтому должна работать только колба.Проверьте следующую ссылку , чтобы узнать, как запустить несколько служб в Docker.

    RUN будет выполняться только во время процесса сборки, в отличие от CMD, который будет выполняться каждый раз, когда вы запускаете контейнер из этого образа.

  3. Объедините всеRUN линий вместе, насколько это возможно, чтобы минимизировать слои сборки, которые приводят к уменьшению образа докера.

Относительно использования этого:

CMD python3 /app/main.py; sudo /etc/init.d/jenkins start

Это не работаетдля вас, потому что эта команда python3 /app/main.py не работает как фоновый процесс, поэтому эта команда sudo /etc/init.d/jenkins start не будет выполняться, пока не будет выполнена предыдущая команда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...