作者:手机用户2502935287_564 | 来源:互联网 | 2023-09-13 05:47
docker创建Jenkins遇到一系列解决问题与方案前言今天上午用docker进行jenkins应用的拉取与启动时遇到了n个bug,有些是我之前遇到过的有些是新
docker 创建Jenkins遇到一系列解决问题与方案
前言
今天上午用docker进行jenkins应用的拉取与启动时遇到了n个bug,有些是我之前遇到过的有些是新的问题,在这里我折腾了半天,仍然是无法解决这个问题,但是中午的时候我一个小时没有理他,结果就自动好起来了???????
(因此这篇博客我并不是要提出一些问题的实时性解决方案,而是列举一些我遇到的一些脑残bug,希望能帮到跟我一样处境的小伙伴)
(隔一段时间自己好,我个人理解是可能docker在拉取与部署的过程中,对一些容器的删删改改可能会遗留一些小进程仍然在后台没有完毕导致)
注意:::!!!!!
1-4小节,我对遇到整个问题的流程进行了大致描述,第五节我对这些问题进行了一个大概的总结,因此
- 赶时间的小伙伴可以直接看第五节,
- 想看笑话的消磨时间的可以看下过程。
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
♥改变成功之后,我顺利的创建了容器,但是又遇到了一个问题:
容器创建完毕之后立马就停止运行了,关于这个问题网上有很多解决方式:
-
就是起一个死循环进程,让他不停的循环下去,前台永远有进程执行
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"
-
添加-it 参数交互运行 添加-d 参数后台运行
(关于这个,,,我本身的命令就有)
我尝试了第一种方法,然后解决了,容器跑起来了
3. 跑起来的jenkins在网页端不能被访问
♥解决了上述问题之后,我又遇到了另一个难题:
我跑起来的jenkins在网页端不能够被访问到,这个大家首先想到的就是是否是防火墙和端口的问题。我在网上找答案,也是清一色的端口和防火墙问题。
(这他妈防火墙问题还用你说吗,我在开应用之前已经把端口都给放开了,根本就不是端口的问题。因此我当时是很失望的。。。。)
♥ 发现问题的苗头:
排除了防火墙问题之后,我首先想到的就是Jenkins应用方面的问题,于是我立马去找关于容器卷映射方面的内容,找到后发现刚刚映射到宿主机的文件夹 “/var/jenkins-data” 中只有一个.log文件,我凭借自己的当时部署成功时候的记忆,我印象中这个文件夹中是下面这个样子的:
于是我便确定了就是这一点的原因,接下来我搜了好多帖子,都没有相关答案。。。
于是我气冲冲的去吃午饭了
4. 吃完午饭发现文件夹里面的内容竟然神奇的有了
吃完午饭的功夫,发现文件夹里面的内容就有了,并且跑在8080端口也可跑通了,并且实现了容器卷的映射。
♥你以为这样就结束了吗,我又发现了一个新的bug:
上午在解决问题的时候,我按照上面的方式创建了不少相关容器,其中有一个就是5672端口的,并且它对应的文件夹里面的内容也恢复了正常的样子,它对应的容器也在正常的跑着,可惜,,5672端口的这个jenkins是不能访问的,如下图
=================================================
不要再给我提狗屁防火墙的事情了,我把证据拿给你看
容器跑步信息:
防火墙端口开放信息:
卷内容:
这让我头皮发麻, 好了就到这里吧,希望知道原因的大佬能够为我这小菜鸟解答疑惑。
5.总结
最后阶段,我对整个过程遇到的问题做一个总结吧,如果不想看上面废话直接看这里也是ok的
-
问题1:touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied 错误提示
-
错误原因
docker 与jenkin默认目录(/var/jenkins_home)的权限问题
-
解决方法
#1. 添加组
groupadd jenkins
#2. 添加jenkins用户到jenkins组中
useradd jenkins -g jenkins
#3.改变文件所有者(以我的路径为例)
chown -R jenkins:jenkins /var/jenkins-data
-
解决效果
很标准的解决方法,亲测好用
-
问题2:docker启动容器之后马上又自动关闭了
-
错误原因
- docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出
- 容器运行的命令如果不是那些一直挂起的命令( 运行top,tail、循环等),就是会自动退出
- 这个是 docker 的机制问题
-
解决方法
-
就是起一个死循环进程,让他不停的循环下去,前台永远有进程执行
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"
-
添加-it 参数交互运行 添加-d 参数后台运行
-
解决效果
很鸡肋,第一种解决方案只能一次性用,万一你想长期用这个容器就会出问题
第二种解决方法根本不起作用,差评
-
我的解决方法
放那别动,把虚拟机关掉,吃个午饭再来(真玄学)
-
问题3: 跑起来的jenkins在网页端不能被访问
-
错误原因
- 端口与防火墙问题 (一般很少人犯这种错误啦)
- 未知原因(我遇到的)
-
解决方法
吃个午饭,啊哈哈哈哈哈!!!!!
-
问题4: jenkins启动只支持 8080 ?
对于这个问题,我还是没有相关的解决方法与经验,希望评论区大佬能多多赐教
创作不易,请多多点赞评论哦,也希望能够找到该问题的解决方法!!!