linux - Bash 自动获取 docker 镜像 ID

标签 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 每次都在动态变化。所以我需要以某种方式从 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 命令来自动执行此操作?

最佳答案

这是一个简单的 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

关于linux - Bash 自动获取 docker 镜像 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54563510/

相关文章:

linux - 在没有 nautilus 通知的情况下使用 bindfs 安装

linux - 如何使用管道进行非阻塞 IPC(UART 仿真)

linux - 在 Linux 中启动和停止 Perl 守护进程

linux - WGET 和 Google Save Browsing API v4 -

bash - 使用ssh登录后如何在新窗口中打开emacs

docker - 如何通过docker-compose网络将前端连接到后端

bash - Dockerfile CMD 未在容器启动时运行

docker - Dockerfile附加PATH环境变量不起作用?

c - 系统如何知道没有更多未等待的 child

java - 启动 Java 应用程序一次并 hibernate 更好,还是重复启动和终止更好?