首页 > 解决方案 > 如何在 docker 容器中并行运行多个命令,然后等待它们全部完成?

问题描述

在没有 docker 的普通 bash 中

sleep 30 &
sleep 20 &
sleep 10 &
wait

我想在一些 docker 容器中执行此操作

docker exec -d container1 "sleep 30"
docker exec -d container2 "sleep 20"
docker exec -d container3 "sleep 10"
wait

但是,等待立即终止。我知道可以使用 ps -ef 来获取正在运行的进程的 pid,并创建一个轮询循环来检查它们何时以 kill 终止,但这感觉非常复杂且不必要。

Docker wait 在我的情况下不起作用,因为容器在运行这些命令后不会停止。

标签: docker

解决方案


如果我启动一些容器:

docker run -d --name container1 fedora34 sleep inf
docker run -d --name container2 fedora34 sleep inf
docker run -d --name container3 fedora34 sleep inf

这对我来说很好:

docker exec container1 sleep 30 &
docker exec container2 sleep 20 &
docker exec container3 sleep 10 &
wait

你可以在这里看到我的完整测试。


推荐阅读