[英]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 run
或docker build
上啟動。
我也嘗試過將sudo /etc/init.d/jenkins start
放在Docker文件的CMD
部分中:
CMD python3 /app/main.py; sudo /etc/init.d/jenkins start
有了這個,我可以卷曲Flask了,但仍然不能讓Jenkins卷曲。
如何讓Jenkins自動啟動?
您需要注意以下幾點:
sudo
因為默認用戶已經是root。 CMD
是容器的主要入口點,因此僅應運行燒瓶。 檢查以下鏈接以了解如何在docker中啟動多個服務。
與
CMD
不同,RUN
將僅在構建過程中執行,而CMD
每次從該映像啟動容器時都將執行。
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
部分將無法正常工作,因為容器可以構建但不能保存任何正在運行的服務。 我不確定容器是否可以保存和加載正在運行的進程,但是我可能是錯的。 如果是這樣,請您澄清一下。
似乎應該在RUN
中RUN
因此,如果有人知道為什么這樣做不起作用或某些最佳做法,也希望您能了解該信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.