猛砸自动获得搬运工图像ID

问题描述 投票:0回答:3

我想在我的Linux机器上运行的几个码头工人的命令:

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并在一个运行执行所有。问题是,图像标识bf46cff9b182是dynamiccally改变每次。所以,我需要以某种方式从pipe命令的输出,这实际上是可能load它。

load的输出是这样的:

Loaded image ID: sha256:bf46cff9b1829b50e28f6485c923efff94799dd84cbf747dc86f6e5d006f2a81

在Linux中被显示成这样:

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

和之后的12字符sha256bf46cff9b182,这将我我的图片ID在上述命令#2插入。

我怎么能写一个bash命令来自动做到这一点?

linux bash docker awk docker-image
3个回答
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
投票

您可以将ID存储在,你可以在接下来的命令中使用的变量。

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

此偏离25得到一个子字符串(我希望正确计数)与长度为12

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

res=$(docker load ...)
hash=${res##*sha256:}
id=${hash:0:12}
docker tag $id ...

0
投票

docker load文档:

它恢复图像和标签。

所以,你可以只使用图像做docker save之前所拥有的标签。

© www.soinside.com 2019 - 2024. All rights reserved.