我正在尝试使用Rundeck构建,启动和链接一组docker容器。简而言之(对于那些不熟悉docker的人),当启动图像时,它会返回一个容器ID。我想在启动后续工作时使用此容器ID。
从命令行运行时,它看起来像这样(仅示例!!):
# docker run -Pd 23ABCD45
34DEF123
# docker run -Pd --link 34DEF123:host1 ABC123EF
321CB456
(注意在第二个命令行中使用第一个返回值)
此时,将有两个容器在运行。第二个将通过--link
选项链接到第一个,并且可以使用第二个容器内的主机名 host1 进行寻址。公平地说,docker生成(或可能给出)一个特定的容器名称,可以用来代替容器id。我更愿意使用容器ID来避免必须创建/跟踪唯一名称的麻烦。
我希望能够捕获第一个命令(容器ID)的输出,以便可以在第二个命令中重用它。这可能吗?
编辑:这些图像在a之后立即用于测试 “docker build”(它也输出了我想要的类似ID) 包含在我的链中)可能后面跟着“docker rm”和“docker rmi“命令,因此捕获此类型有很多用途 输出并通过一组相关的操作进行输出。这个 不只是关于启动/链接容器。
答案 0 :(得分:4)
没有直接的Rundeck实现允许您将输出从一个作业传递到另一个作业作为输入,但是我已经尝试了过去的工作,并且我已经确定了第二种方法。
由于您依赖文件,可能会出现问题,但良好的代码可以改进。
这是我正在使用的方法。
JobA 打印两个随机数。
echo $RANDOM;echo $RANDOM
JobB 打印出从JobA生成的第二个随机数,作为选项“数字”传递
echo "$RD_OPTION_NUMBER is the number JobB received"
JobC 调用第一个作业,将最后一行保存到变量并将其传递给JobB
#!/bin/bash
OUTPUT_FROM_JOB_A=`run -f --id <ID of JobA> | tail -n 1`
run -f --id <ID of JobB> -- -number $OUTPUT_FROM_JOB_A
输出:
[5394] execution status: succeeded
Job execution started:
[5395] JobB <https://hostname:4443/project/Project/execution/show/5395>
6186 is the number JobB received
[5395] execution status: succeeded
这只是原始代码示例。你可以用python子进程做很多事情,或者只使用bash。