2

我有一个管道脚本,我试图将多个容器链接在一起(一个自由容器、Oracle 容器和一个 maven jdk 容器)。

首先,我创建了 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 ') {

我在詹金斯收到以下错误:

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

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

4

2 回答 2

3

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

调整您的命令以使用双引号代替:

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

我想您不想进行插值$M2_REPO,因此可以通过在.\

于 2017-01-11T07:51:26.680 回答
0

我不知道它是什么语言,但 docker build 在当前目录中查找文件“Dockerfile”。所以 docker.build('oracle', 'docker/oracle') 有一些问题,因为它已经与您一起构建了映像,tag docker/oracle 您只需运行此映像而不是构建。

于 2017-01-11T06:51:09.620 回答