Bash 自动获取 docker 图片 ID
Bash get docker image ID automatically
我正尝试在我的 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
每次都在动态变化。所以我需要以某种方式从 load
命令的输出中 pipe
它,这实际上是可能的。
load
的输出是这样的:
Loaded image ID: sha256:bf46cff9b1829b50e28f6485c923efff94799dd84cbf747dc86f6e5d006f2a81
在Linux上显示为:
4f512fb4b0ea: Loading layer 5.079MB/5.079MB
Loaded image ID: sha256:b6c3df68a9365ccb0935a835aa332b29db780cb7e81eac83acf717b2 de779073
sha256
之后的 12
个字符是 bf46cff9b182
,这就是我在上面的命令 #2 中插入的图像 ID。
如何编写 bash 命令来自动执行此操作?
来自 docker load 文档:
It restores both images and tags.
因此,您可以只使用图像在执行 docker save.
之前的标签
您可以将 id 存储在一个变量中,以便在下一个命令中使用。
res=$(docker load ...)
id=${res:25:12}
docker tag $id ...
这从偏移量 25(我希望我计算正确)得到一个长度为 12 的子字符串
编辑:
我发现,您甚至不需要 sed 以 "clean" 方式提取哈希。
res=$(docker load ...)
hash=${res##*sha256:}
id=${hash:0:12}
docker tag $id ...
这是一个简单的 sed
脚本来提取 sha256。
docker load -i test.tar |
sed -n 's/^Loaded image ID: sha256:\([0-9a-f]*\).*//p'
您现在可以将其捕获到一个变量中,或者使用 xargs
:
docker load -i test.tar |
sed -n 's/^Loaded image ID: sha256:\([0-9a-f]*\).*//p' |
xargs -i docker tag {} test:v1.0
我正尝试在我的 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
每次都在动态变化。所以我需要以某种方式从 load
命令的输出中 pipe
它,这实际上是可能的。
load
的输出是这样的:
Loaded image ID: sha256:bf46cff9b1829b50e28f6485c923efff94799dd84cbf747dc86f6e5d006f2a81
在Linux上显示为:
4f512fb4b0ea: Loading layer 5.079MB/5.079MB
Loaded image ID: sha256:b6c3df68a9365ccb0935a835aa332b29db780cb7e81eac83acf717b2 de779073
sha256
之后的 12
个字符是 bf46cff9b182
,这就是我在上面的命令 #2 中插入的图像 ID。
如何编写 bash 命令来自动执行此操作?
来自 docker load 文档:
It restores both images and tags.
因此,您可以只使用图像在执行 docker save.
之前的标签您可以将 id 存储在一个变量中,以便在下一个命令中使用。
res=$(docker load ...)
id=${res:25:12}
docker tag $id ...
这从偏移量 25(我希望我计算正确)得到一个长度为 12 的子字符串
编辑: 我发现,您甚至不需要 sed 以 "clean" 方式提取哈希。
res=$(docker load ...)
hash=${res##*sha256:}
id=${hash:0:12}
docker tag $id ...
这是一个简单的 sed
脚本来提取 sha256。
docker load -i test.tar |
sed -n 's/^Loaded image ID: sha256:\([0-9a-f]*\).*//p'
您现在可以将其捕获到一个变量中,或者使用 xargs
:
docker load -i test.tar |
sed -n 's/^Loaded image ID: sha256:\([0-9a-f]*\).*//p' |
xargs -i docker tag {} test:v1.0