在Jenkins流水线中通过Docker插件获取MongoDB容器IP的方法
问题:Jenkins流水线中获取MongoDB容器IP地址
我在Jenkins流水线中使用Docker插件启动用于测试的后台MongoDB容器,代码如下:
stage('Start') { steps { script { container = docker.image('mongo:latest').run('-p 27017:27017 --name mongodb -d') } } }
我需要获取该容器的IP地址以进行连接。我在网上找到一些提及docker.inspect和docker.getIpAddress方法的示例,但调用时均报错,查看Docker插件源码后发现这些方法并不存在。请问是否可以从container对象中获取IP地址?
解决方案
目前新版Jenkins Docker插件的container对象并没有直接提供获取IP的方法,那些旧示例里的方法已经被移除,你可以通过以下两种方式获取容器IP:
方法1:通过容器ID执行docker inspect命令提取IP
利用container.id获取容器唯一标识,再通过Shell命令解析docker inspect的输出结果得到IP地址:
stage('Start & Get MongoDB IP') { steps { script { container = docker.image('mongo:latest').run('-p 27017:27017 --name mongodb -d') // 执行docker inspect提取容器IP并去除多余换行空格 def containerIp = sh( script: "docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${container.id}", returnStdout: true ).trim() echo "MongoDB容器IP地址:${containerIp}" // 后续测试环节可直接使用containerIp连接数据库 } } }
方法2:直接使用宿主映射端口连接
由于你已经将容器的27017端口映射到了Jenkins节点的27017端口,若测试代码运行在Jenkins节点上,也可以直接使用节点的IP(或localhost,如果流水线在本机执行)加上27017端口来连接MongoDB,无需获取容器内部IP。
内容的提问来源于stack exchange,提问作者vgru
相关产品推荐
相关产品推荐

