我需要使用 docker-compose 部署一個啟用了 https 的 Jenkins 容器,而無需使用 Nginx 之類的反向代理,我該如何做到這一點?
我已經閱讀了這篇文章、這篇博文和這篇博文,所有的女巫都要求我部署帶有 java 引數的 .war 檔案,比如--httpPortand --httpsPort。
我將這些選項放在我的 docker-compose 檔案中的什么位置?我還有一個 Dockerfile,我在安裝后運行一些命令,是否可以將這些選項放在那里?
這是我當前的 docker-compose 檔案,它可以作業。注意我沒有嘗試調整此檔案中的 http 或 https 埠:
version: '3.7'
services:
jenkins:
#image: jenkins/jenkins:lts
build:
context: ./
dockerfile: jenkins.Dockerfile
privileged: true
user: root
expose:
- 8080
ports:
- 50000:50000
container_name: jenkins
volumes:
- ./jenkins_data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
environment:
DOCKER_SOCKET: /var/run/docker.sock
privileged: true
networks:
- jenkins_nw
restart: unless-stopped
networks:
jenkins_nw:
driver: bridge
這是我的 jenkins.Dockerfile:
FROM jenkins/jenkins:lts
ENV http_proxy http://our.proxy.com:2222
ENV https_proxy http://our.proxy.com:2222
USER root
COPY ["./certs/ourrootchain.cer", "/var/jenkins_home"]
RUN \
cd /tmp \
&& keytool -keystore /opt/java/openjdk/lib/security/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias ourrootchain -file /var/jenkins_home/ourrootchain.cer
RUN apt-get update && apt-get install tcpdump procps net-tools -y
故障排除
- 我安裝了 procps 并檢查了正在運行的 java 命令以在 conatiner 中啟動 jenkins。輸出如下。我還沒有弄清楚如何調整這個命令運行的引數,有沒有辦法?
java -Duser.home=/var/jenkins_home -Djenkins.model.Jenkins.slaveAgentPort=50000 -jar /usr/share/jenkins/jenkins.war - 我嘗試使用
JAVA_OPTS: "--httpsPort:8443"以及https_port: 8443在environment:docker-compose 檔案中的部分中使用。使用JAVA_OPTS: --httpsPort:8443給出了錯誤,并且容器存在,因為該命令未被識別。https_port: 8443部署后容器內部什么也沒做,netstat 顯示服務器沒有在 https 上監聽,java 命令也沒有從 grep on 更改ps -aux。
我相信我需要將我的 pkcs12 檔案匯入密鑰庫。我在線閱讀的所有指南都表明我需要創建一個新的密鑰庫。是否可以將我的 pkcs12 匯入現有的密鑰庫?
有沒有地方可以定義正在運行的 java 命令?
更新:
我不是 java 專家,所以我不知道“-D”用于虛擬機選項。我現在將“JAVA_OPTS”調整為如下所示
JAVA_OPTS: "-DhttpsPort=8443 -DhttpsCertificate=/var/jenkins_certs/jenkins.crt -DhttpsPrivateKey=/var/jenkins_certs/jenkins.key。我還調整了 Dockerfile 以創建 /var/jenkins_certs 目錄,并復制實際的證書和私鑰。容器部署成功,使用 aps -aux | grep java我可以看到我的選項實際上正在使用中。但是netstat -tulpn仍然顯示只有“8080”是打開的。為什么 Jenkins 容器拒絕使用 HTTPS 或拒絕打開我配置的 HTTPS 埠?
uj5u.com熱心網友回復:
我找到了這個 docker hub image jenkins-ssl 查看github我發現他們如何配置他們的證書并添加“JENKINS_OPTS”陳述句來實際更改我需要的引數。我在 Dockerfile 中編輯了以下幾行,以使用我的自定義證書來讓它最終作業!
#Commenting this out
#ENV JENKINS_OPTS --httpPort=-1 --httpsPort=8443 --httpsCertificate="$CERT_FOLDER/jenkins.pem" --httpsPrivateKey="$CERT_FOLDER/jenkins.key"
#Copy over custom certs change permissions to jenkins:jenkins
COPY ["./certs/", "/var/jenkins_certs"]
RUN chown -R jenkins:jenkins "/var/jenkins_certs"
#Update root ca with custom trust chain (For web only)
RUN cp /var/jenkins_certs/attrootchain.cer /usr/local/share/ca-certificates && update-ca-certificates
#Update root ca with custom trust chain (for java env)
RUN keytool -keystore /opt/java/openjdk/lib/security/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias ourrootchain -file /var/jenkins_certs/ourrootchain.cer
#run Jenkins options using the custom cert and key
ENV JENKINS_OPTS --httpPort=-1 --httpsPort=8443 --httpsCertificate="/var/jenkins_certs/jenkins.crt" --httpsPrivateKey="/var/jenkins_certs/jenkins.key"
然后跑了 docker build -t jenkins-ssl ./
現在我可以在我的 docker-compose 檔案中使用這個影像。或者像這樣運行一個簡單的 docker run 陳述句:
docker run --name jenkins-ssl -p 443:8443 -p 50000:50000 jenkins-ssl
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/412029.html
標籤:
