在jenkinspipe道中获取容器ID时出错

我有一个pipe道脚本,我试图将几个容器连接在一起(一个自由容器,oracle容器和一个maven jdk容器)。

首先我创build一个oracle容器:

db = docker.build('oracle', 'docker/oracle').run("-p 49160:22 -p 49161:1521") 

然后将其链接到我的自由容器,似乎工作正常:

 wlp = docker.build('liberty', 'docker/liberty').run("-p 9080:9080 --link=${db.id}:oracle") 

但是当我试图把它链接到maven的时候:

 mvn.inside('-v $M2_REPO:/m2repo --link=${db.id}:oracle ') { 

我在jenkins得到以下错误:

失败:java.io.IOException:无法运行图像'maven:3.3.9-jdk-8'。 错误:docker:来自守护程序的错误响应:无法获取$ {db.id}的容器。 请参阅“/ usr / bin / docker-current run –help”。

这可能与它使用inside调用而不是run的事实有关吗?

您的variables${db.id}Pipeline DSL脚本中不会被replace(或groovy speak: interpolated ),因为您使用的是引号。

调整你的命令来代替使用双引号

 mvn.inside("-v \$M2_REPO:/m2repo --link=${db.id}:oracle") { 

我想你不希望有$M2_REPO插值,因此它通过预先的\逃脱

我不知道它是什么语言,但docker构build查找当前目录中的文件“Dockerfile”。 所以docker.build('oracle', 'docker/oracle')有一些问题,因为它已经build立与tag docker/oracle形象,你只需要运行这个形象不build立。