在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立。