Bash自动获取Docker映像ID

时间:2019-02-06 22:24:49

标签: linux bash docker awk docker-image

我正在尝试在Linux计算机上运行一些docker命令:

1- sudo docker load -i test.tar
2- sudo docker tag bf46cff9b182 test:v1.0
3- sudo docker run -it --network host -v /home/logs:/home/test/test/logs test:v1.0

但是我想制作一个runme.sh并一次执行所有操作。问题是ImageID bf46cff9b182每次都在动态变化。因此,我需要从pipe命令的输出中以某种方式load来实现它,这实际上是可能的。

load的输出如下:

Loaded image ID: sha256:bf46cff9b1829b50e28f6485c923efff94799dd84cbf747dc86f6e5d006f2a81

在Linux上显示为:

4f512fb4b0ea: Loading layer  5.079MB/5.079MB
Loaded image ID: sha256:b6c3df68a9365ccb0935a835aa332b29db780cb7e81eac83acf717b2                                                                             de779073

12之后的sha256字符为bf46cff9b182,这就是我在上面的命令#2中插入的图像ID。

如何编写bash命令以自动执行此操作?

3 个答案:

答案 0 :(得分:2)

这是一个简单的sed脚本,用于提取sha256。

docker load -i test.tar |
sed -n 's/^Loaded image ID: sha256:\([0-9a-f]*\).*/\1/p'

您现在可以将其捕获到变量中,或使用xargs向前输送它:

docker load -i test.tar |
sed -n 's/^Loaded image ID: sha256:\([0-9a-f]*\).*/\1/p' |
xargs -i docker tag {} test:v1.0

答案 1 :(得分:1)

您可以将ID存储在下一个命令中可以使用的变量中。

super()

这会从长度为12的偏移量25(希望计数正确)中获得一个子字符串

编辑: 我发现,您甚至不需要sed以“干净”的方式提取哈希。

res=$(docker load ...)
id=${res:25:12}
docker tag $id ...

答案 2 :(得分:0)

摘自docker load文档:

  

它同时还原图像和标签。

因此,您可以只使用图像具有的标签,然后再执行 docker save

相关问题