热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

docker创建Jenkins遇到一系列解决问题与方案

docker创建Jenkins遇到一系列解决问题与方案前言今天上午用docker进行jenkins应用的拉取与启动时遇到了n个bug,有些是我之前遇到过的有些是新

docker 创建Jenkins遇到一系列解决问题与方案


前言

今天上午用docker进行jenkins应用的拉取与启动时遇到了n个bug,有些是我之前遇到过的有些是新的问题,在这里我折腾了半天,仍然是无法解决这个问题,但是中午的时候我一个小时没有理他,结果就自动好起来了???????

(因此这篇博客我并不是要提出一些问题的实时性解决方案,而是列举一些我遇到的一些脑残bug,希望能帮到跟我一样处境的小伙伴)

(隔一段时间自己好,我个人理解是可能docker在拉取与部署的过程中,对一些容器的删删改改可能会遗留一些小进程仍然在后台没有完毕导致)

注意:::!!!!!

1-4小节,我对遇到整个问题的流程进行了大致描述,第五节我对这些问题进行了一个大概的总结,因此


  1. 赶时间的小伙伴可以直接看第五节,
  2. 想看笑话的消磨时间的可以看下过程。

1.docker 创建 Jenkins的众所周知流程如下

#1.拉取镜像(列举两个版本)
docker pull jenkins/jenkins:lts-jdk11
#or
docker pull jenkins/jenkins:jdk11#2.提前策划要开启的端口(建议是8080)#3.创建容器
docker run -it --previleged=true -v /宿主机绝对路径目录:/容器内目录 镜像名或镜像ID:版本号
#(对应例子如下)
docker run -it - -p 8080:8080 -v /var/jenkins-data:/var/jenkins_home --name mysecondjenkins jenkins/jenkins:jdk11# -it : 以交互的方式打开镜像为容器
# --detach: 后台运行
# -v : 容器卷绑定# /宿主机绝对路径目录 为本地文件夹,/容器内目录 是容器内目录# 镜像名或镜像ID : 需要打开的镜像

具体关于容器卷绑定,不了解的小伙伴可以参考这篇文章:(27条消息) Docker入门:容器卷——容器持久化,实现容器间继承和数据共享_嵌入式技术的博客-CSDN博客


2. 发现问题,删除了该容器

经过上述步骤应该是跑起来了,但是我后来发现一个问题: 我在进行容器卷绑定的时候,绑定失败了(这个是我自己的原因,因为在创建容器的时候关于容器卷我指定的宿主机路径错误了。。)

于是我就想到了一个简单粗暴的方法,将该容器删除之后,再按照原先的方法创建,这次注意好宿主机路径,可是创建之后出现了如下问题:

touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied

♥这个是因为docker容器无权访问容器卷映射到的宿主机文件所致,也找到了相应的解决方法:

#1. 添加组
groupadd jenkins
#2. 添加jenkins用户到jenkins组中
useradd jenkins -g jenkins
#3.改变文件所有者(以我的路径为例)
chown -R jenkins:jenkins /var/jenkins-data

改变成功之后,我顺利的创建了容器,但是又遇到了一个问题:

容器创建完毕之后立马就停止运行了,关于这个问题网上有很多解决方式:


  1. 就是起一个死循环进程,让他不停的循环下去,前台永远有进程执行

    docker run -it - -p 8080:8080 -v /var/jenkins-data:/var/jenkins_home --name mysecondjenkins jenkins/jenkins:jdk11 /bin/sh -c "while true; do echo hello world; sleep 1; done"

  2. 添加-it 参数交互运行 添加-d 参数后台运行

    (关于这个,,,我本身的命令就有)

我尝试了第一种方法,然后解决了,容器跑起来了


3. 跑起来的jenkins在网页端不能被访问

解决了上述问题之后,我又遇到了另一个难题:

我跑起来的jenkins在网页端不能够被访问到,这个大家首先想到的就是是否是防火墙和端口的问题。我在网上找答案,也是清一色的端口和防火墙问题。

(这他妈防火墙问题还用你说吗,我在开应用之前已经把端口都给放开了,根本就不是端口的问题。因此我当时是很失望的。。。。)

发现问题的苗头:

排除了防火墙问题之后,我首先想到的就是Jenkins应用方面的问题,于是我立马去找关于容器卷映射方面的内容,找到后发现刚刚映射到宿主机的文件夹 “/var/jenkins-data” 中只有一个.log文件,我凭借自己的当时部署成功时候的记忆,我印象中这个文件夹中是下面这个样子的:

在这里插入图片描述

于是我便确定了就是这一点的原因,接下来我搜了好多帖子,都没有相关答案。。。

于是我气冲冲的去吃午饭了


4. 吃完午饭发现文件夹里面的内容竟然神奇的有了

吃完午饭的功夫,发现文件夹里面的内容就有了,并且跑在8080端口也可跑通了,并且实现了容器卷的映射。

在这里插入图片描述

你以为这样就结束了吗,我又发现了一个新的bug:

上午在解决问题的时候,我按照上面的方式创建了不少相关容器,其中有一个就是5672端口的,并且它对应的文件夹里面的内容也恢复了正常的样子,它对应的容器也在正常的跑着,可惜,,5672端口的这个jenkins是不能访问的,如下图

在这里插入图片描述

=================================================

不要再给我提狗屁防火墙的事情了,我把证据拿给你看

容器跑步信息:

在这里插入图片描述

防火墙端口开放信息:

在这里插入图片描述

卷内容:

在这里插入图片描述

这让我头皮发麻, 好了就到这里吧,希望知道原因的大佬能够为我这小菜鸟解答疑惑。


5.总结

最后阶段,我对整个过程遇到的问题做一个总结吧,如果不想看上面废话直接看这里也是ok的


  1. 问题1:touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied 错误提示

    1. 错误原因

      docker 与jenkin默认目录(/var/jenkins_home)的权限问题

    2. 解决方法

      #1. 添加组
      groupadd jenkins
      #2. 添加jenkins用户到jenkins组中
      useradd jenkins -g jenkins
      #3.改变文件所有者(以我的路径为例)
      chown -R jenkins:jenkins /var/jenkins-data

    3. 解决效果

      很标准的解决方法,亲测好用

  2. 问题2:docker启动容器之后马上又自动关闭了

    1. 错误原因

      1. docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出
      2. 容器运行的命令如果不是那些一直挂起的命令( 运行top,tail、循环等),就是会自动退出
      3. 这个是 docker 的机制问题
    2. 解决方法

      1. 就是起一个死循环进程,让他不停的循环下去,前台永远有进程执行

        docker run -it - -p 8080:8080 -v /var/jenkins-data:/var/jenkins_home --name mysecondjenkins jenkins/jenkins:jdk11 /bin/sh -c "while true; do echo hello world; sleep 1; done"

      2. 添加-it 参数交互运行 添加-d 参数后台运行

    3. 解决效果

      很鸡肋,第一种解决方案只能一次性用,万一你想长期用这个容器就会出问题

      第二种解决方法根本不起作用,差评

    4. 我的解决方法

      放那别动,把虚拟机关掉,吃个午饭再来(真玄学)

  3. 问题3: 跑起来的jenkins在网页端不能被访问

    1. 错误原因

      1. 端口与防火墙问题 (一般很少人犯这种错误啦)
      2. 未知原因(我遇到的)
    2. 解决方法

      吃个午饭,啊哈哈哈哈哈!!!!!

  4. 问题4: jenkins启动只支持 8080 ?

    对于这个问题,我还是没有相关的解决方法与经验,希望评论区大佬能多多赐教

在这里插入图片描述

创作不易,请多多点赞评论哦,也希望能够找到该问题的解决方法!!!


推荐阅读
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
  • mysql自动打开文件_让docker中的mysql启动时自动执行sql文件
    本文提要本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动My ... [详细]
  • 本文主要介绍关于linux文件描述符设置,centos7设置文件句柄数,centos7查看进程数的知识点,对【Linux之进程数和句柄数】和【linux句柄数含义】有兴趣的朋友可以看下由【东城绝神】投 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文介绍了Python函数的定义与调用的方法,以及函数的作用,包括增强代码的可读性和重用性。文章详细解释了函数的定义与调用的语法和规则,以及函数的参数和返回值的用法。同时,还介绍了函数返回值的多种情况和多个值的返回方式。通过学习本文,读者可以更好地理解和使用Python函数,提高代码的可读性和重用性。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • macOS命令行创建Android模拟器
    macOS下不安装AndroidStudio使用VSCode来开发Flutter应用使用命令行创建和管理Android模拟器设备avdmanageravdmanager 是一种命令 ... [详细]
  • 关于extjs开发实战pdf的信息
    本文目录一览:1、extjs实用开发指南2、本 ... [详细]
author-avatar
手机用户2502935287_564
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有