当前位置: 首页 > 知识库问答 >
问题:

如何使用docker compose部署启用HTTPS的Jenkins容器,而不使用反向代理容器?

颜功
2023-03-14

我需要使用docker compose部署一个启用https的Jenkins容器,而不使用像Nginx这样的反向代理,如何实现这一点?

我已经阅读了这篇文章,这篇博客文章,这篇博客文章都要求我部署。带有java参数的war文件,如--httpPort--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

这是我的詹金斯。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

故障排除

  • I installed procps and checked the java command being run to start jenkins in the conatiner. The output is the following. I still yet to figure out how to adjust the parameters this command runs, is there a way?
    java -Duser.home=/var/jenkins_home -Djenkins.model.Jenkins.slaveAgentPort=50000 -jar /usr/share/jenkins/jenkins.war
    

    我认为我需要将pkcs12文件导入密钥库。我在线阅读的所有指南都说明我需要创建一个新的密钥库。是否可以将我的pkcs12导入现有密钥库?

    是否有一个地方可以定义正在运行的java命令?

    更新:

    我不是java专家,所以我不知道“-D”用于虚拟机选项。我将“JAVA_选项”调整为如下所示:“-DhttpsPort=8443-DhttpsCertificate=/var/jenkins_certs/jenkins.crt-DhttpsPrivateKey=/var/jenkins_certs/jenkins.key。我还调整了Dockerfile以创建/var/jenkins_certs目录,并复制到实际的证书和私钥上。容器部署成功,使用ps-aux | grep java我可以看到我的选项a你真的被利用了。但是netstat-tulpn仍然显示只有“8080”处于打开状态。为什么Jenkins容器拒绝使用HTTPS或打开我配置的HTTPS端口?

共有1个答案

罗伟志
2023-03-14

我在github上找到了docker hub的图片jenkins ssl,我找到了他们是如何配置证书的,并添加了“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-comment文件中使用此图像。或者像这样作为简单的docker run语句运行:

docker run——名称jenkins ssl-p 443:8443-p 50000:50000 jenkins ssl

 类似资料:
  • 问题内容: Docker新手在这里。 我已经设置了docker容器来运行一个简单的Node JS应用程序。 假设我有一个新版本的应用程序(例如 1.1 ),必须由Jenkins CI进行部署。在这里,我对Jenkins CI到底应该做什么应该有所了解: 应该关闭并删除旧容器( 1.0 )并启动新实例 1.1 吗? 要么 应该进入当前运行的容器并仅更新代码吗? 问题答案: 使用CI / CD工具(如

  • 问题内容: 我正在将Jenkins声明性管道与Docker代理一起使用来构建和测试我的软件,包括使用testcontainer运行集成测试。我可以在开发环境中(不使用Jenkins)运行我的testcontainers测试,但是在Jenkins下它们失败。 testcontainers Ryuk资源获取守护程序不起作用 我可以通过将环境变量设置为来禁用守护进程来解决该问题。但是,某些集成测试仍然反

  • 问题内容: 我面临以下问题:我创建了一个Jenkins Docker容器,并将主机上的Docker套接字与该容器链接。像这样: 然后,当我尝试在詹金斯上创建一些作业时,我收到通常的“权限被拒绝”消息: 尝试在unix:///var/run/docker.sock上连接到Docker守护程序套接字时获得的权限被拒绝:获取 http://%2Fvar%2Frun%2Fdocker.sock/v1.29

  • 我正在使用Docker Agents的Jenkins声明式管道来构建和测试我的软件,包括使用测试容器运行集成测试。我可以在我的开发环境中运行测试容器测试(不使用Jenkins),但它们在Jenkins下会失败。 testcontainers Ryuk资源获取守护程序不工作 我可以通过将环境变量设置为true来禁用守护进程来解决这个问题。但是,一些集成测试仍然一再失败。 使用Elasticsearc

  • 我正在尝试通过< code>apiserver proxy连接到< code > sky DNS < code > etcd 服务器,使用此文档http://kubernetes . io/docs/user-guide/access-the-cluster/# manually-constructing-API server-proxy-URLs命令 curl--cacert /etc/kube

  • 我刚刚完成了第一次Docker部署,当我运行这个命令查看最近进程的状态时... 我得到这个输出