问题描述
- 使用vagrant+virtualBox构建一个ubuntu虚拟机
- 在ubuntu虚拟机中使用docker并且启动jenkins容器其中docker-compose的配置如下
image: jenkins
ports:
- 8088:8088
。。。。
- 使用vagrant的forwarded_port进行network链接
config.vm.network "forwarded_port", guest: 8088, host: 8088
- 此时我在localhost访问
http://localhost:8088
发现出现一直connect到最后以超时结束,却没有看到想要的jenkins界面
解答思路
Q1.首先从结果判断,连接超时能说明我们一直在向
http://localhost:8088
发送请求但是请求没有得到任何的回应能说明什么?-
A1:先做一些知识补全:
抛出超时异常的情况通常分为两种:
- 请求超时:客户端发起请求,但是没有在5s内连接到服务器
- 响应超时: 请求被服务器处理,但是服务器处理时间超过5s导致超时
那么可以推断情况必然属于这两种之一。
Q2:那么是上面哪一种情况?如果是请求超时,说明没有连接到服务器,为什么不返回404?
-
A2:为了解决第二个问题再补充一些知识:
抛出404:指的是已经和服务器建立了连接但是服务器返回了404状态码
超时:压根没有连接到服务器,或者服务器还没处理完啥也没有返回。要知道404是服务器返回的。如果要判断这个问题到底是上述哪一种情况。那我们就只能看jenkins容器的log了。发现jenkins容器的log里面竟然没有打印出任何log做出任何反应。那么大约可以推断是没有和服务器建立连接。
- Q3:那么连接分成两部分,一个是localhost和ubuntu虚拟机的链接,一个是ubuntu虚拟机和docker容器的链接,那么该如何确定
- A3:那么这个就好判断了,首先在ubuntu中向
htpp://localhost:8088
curl一条get请求,然后发现,容器任然没有log。基本可以断定,请求的位置没有任何服务。
- Q4:能说明8088没有服务,那么jenkins服务到底启动在了哪里?
- A4:回想起当没有对jenkins做配置的时候,jenkins会自动的启动在8080端口,结合查看官网对jnekins镜像的描述发现,官网的范例都是都是将容器中的8080端口暴露出来。继续看官网发现有一个
Passing Jenkins launcher parameters
部分有个jenkins-optionENV JENKINS_OPTS --httpPort=-1 --httpsPort=8083
说明如果没有手动的对jenkins做配置过,那么jenkins服务一定启动在默认端口
- Q5:那么怎么能说明jenkins的默认端口是8080,并且在容器中一定启动在8080?
- A5:根据官网描述:
- Download Jenkins.
- Open up a terminal in the download directory and run java -jar jenkins.war
- Browse to http://localhost:8080 and follow the instructions to complete the installation.
- Many Pipeline examples require an installed Docker on the same computer as Jenkins.
因此在没有做任何配置的时候,jenkins自动启动在8080端口,因此我们将jenkins容器暴露出来的端 口改成8080就可以访问到jenkins了
反思
- 首先:我发现我在每个东西的时候并没有问自己为什么。就比如我暴露了jenkins容器的8088端口,可是我为什么就8088而不是8080。这就是明显的想的少。
- 其次:你确定jenkins会默认启动在8080端口,你有什么依据。就是猜想太多,总是想当然,其实自己的知识积累并没有那么多。不会就动手查,非要想想想,还是手懒。
- 最后:能不能不要手比脑子快,急死忙活的写写写,能不能先想好要干什么,怎么做,再动手,要不然必然造成结果不对了,然后不想为什么不对,然后就试试试。
Action:
- 以后每干一件事情前必须画图确定目标步骤,复杂的过程必须写清楚设计方式。
- 每写一行代码,添加注释说明这样写的原因
- 出现问题,先找出来为什么这样,再查怎么解决,不要着急,找出原因比解决问题更有收获。