在 jenkins 管道中获取容器 ID 时出错

Error getting container id in jenkins pipeline

我有一个管道脚本,我试图在其中 link 多个容器(自由容器、Oracle 容器和 Maven jdk 容器)。

首先我创建了 oracle 容器:

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

然后 link 它到我的 liberty 容器,它似乎工作正常:

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

但是当我尝试 link 它给 maven 时:

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

我在 jenkins 中收到以下错误:

Failure: java.io.IOException: Failed to run image 'maven:3.3.9-jdk-8'. Error: docker: Error response from daemon: Could not get container for ${db.id}. See '/usr/bin/docker-current run --help'.

这是否与它使用 inside 调用而不是 run 这一事实有关?

我不知道它是什么语言,但是 docker 构建在当前目录中查找文件 "Dockerfile"。所以 docker.build('oracle', 'docker/oracle') 有一些问题,因为它已经用 tag docker/oracle 构建了图像 你只需要运行这个图像不构建。

您的变量 ${db.id} 未在 管道 DSL 脚本 中被替换(或 groovy 说:interpolated),因为您正在使用 引号。

将您的命令调整为使用双引号

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

我想你不想插入 $M2_REPO,因此通过在 \.

前面添加 转义