我正在尝试使用Rundeck构建,启动和链接一组Docker容器。简而言之(对于不熟悉docker的用户),启动映像时,它将返回容器ID。我想在启动后续作业时使用此容器ID。
从命令行运行时,它看起来像这样(仅示例!):
# docker run -Pd 23ABCD45 34DEF123 # docker run -Pd --link 34DEF123:host1 ABC123EF 321CB456
(请注意在第二个命令行中使用第一个返回值)
此时,将有两个容器在运行。第二个将通过该--link选项链接到第一个,并且可使用第二个容器内部的主机名 host1 对其进行寻址。公平地说,泊坞窗生成(或可以给定)特定的容器名称,该名称可以代替容器ID使用。我宁愿使用容器ID来避免必须创建/跟踪唯一名称的麻烦。
--link
我希望能够捕获第一个命令的输出(容器ID),以便可以在第二个命令中重用它。这可能吗?
编辑:这些图像将在“ docker build”(它也会输出我想包含在我的链中的相似ID)之后立即用于测试,并且可能紧随其后的是“ docker rm”和“ docker rmi”命令,因此捕获此类输出并通过一组相关操作进行输出的用途有很多。这不仅仅与启动/链接容器有关。
没有直接的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。