簡體   English   中英

Jenkins沒有在Docker中啟動(包括Dockerfile)

[英]Jenkins not starting in docker (Dockerfile included)

我正在嘗試在Docker容器中使用Jenkins構建一個簡單的應用程序。 我有以下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

我能夠啟動flask並安裝Jenkins,但是,在運行時,Jenkins沒有運行。 curl localhost:8080不成功。

在日志輸出中,我可以看到:

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

但是,它仍然沒有運行。

我可以ssh進入容器並手動運行sudo /etc/init.d/jenkins start來啟動它,但是我希望它在docker rundocker build上啟動。

我也嘗試過將sudo /etc/init.d/jenkins start放在Docker文件的CMD部分中:

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

有了這個,我可以卷曲Flask了,但仍然不能讓Jenkins卷曲。

如何讓Jenkins自動啟動?

您需要注意以下幾點:

  1. 無需使用sudo因為默認用戶已經是root。
  2. 為了在同一容器中運行多個服務,您需要使用任何類型的服務管理器,例如Supervisord Jenkins未運行,因為CMD是容器的主要入口點,因此僅應運行燒瓶。 檢查以下鏈接以了解如何在docker中啟動多個服務。

    CMD不同, 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才會運行。

我只能通過在CMD部分中啟動Jenkins使其工作,但是需要在Flask之前啟動Jenkins,因為Flask會連續運行並且下一條命令將永遠不會執行:

不工作:

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

這確實有效:

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

編輯:

我相信將其放入RUN部分將無法正常工作,因為容器可以構建但不能保存任何正在運行的服務。 我不確定容器是否可以保存和加載正在運行的進程,但是我可能是錯的。 如果是這樣,請您澄清一下。

似乎應該RUNRUN因此,如果有人知道為什么這樣做不起作用或某些最佳做法,也希望您能了解該信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM