我如何 运行 对多个容器执行单个 docker 命令
How do i run a single docker exec command against multiple containers
我目前正在 运行 随时使用 2 到 6 个 docker 容器构建一个 mac 迷你主机,这些容器由同一个代理构建。容器用作构建代理,但时不时地构建失败并且无法正确清理。这会导致遗留占用 space 的文件。
我想设置和 cron 作业,运行 每晚,对每个容器执行 docker exec 命令并删除我的构建目录。
我试过简单的:
docker exec -it `docker ps -q` ls /root/build-dir
但这失败了:
OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused "exec: \"ee89958ce4bc\": executable file not found in $PATH": unknown
然而这有效:
docker exec -it ee89958ce4bc ls /root/build-dir
有没有一种方法可以对多个容器使用 docker exec 而无需编写复杂的脚本来循环遍历来自 docker ps 的容器 ID?
注意:我不想更改 docker 容器并在其中添加 cron 作业。我想在主机 machine
上 运行
你可以使用 for loop
:
for con in `docker ps -q` ; do echo "$con" && docker exec -it $con ls -l; done
我目前正在 运行 随时使用 2 到 6 个 docker 容器构建一个 mac 迷你主机,这些容器由同一个代理构建。容器用作构建代理,但时不时地构建失败并且无法正确清理。这会导致遗留占用 space 的文件。
我想设置和 cron 作业,运行 每晚,对每个容器执行 docker exec 命令并删除我的构建目录。
我试过简单的:
docker exec -it `docker ps -q` ls /root/build-dir
但这失败了:
OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused "exec: \"ee89958ce4bc\": executable file not found in $PATH": unknown
然而这有效:
docker exec -it ee89958ce4bc ls /root/build-dir
有没有一种方法可以对多个容器使用 docker exec 而无需编写复杂的脚本来循环遍历来自 docker ps 的容器 ID?
注意:我不想更改 docker 容器并在其中添加 cron 作业。我想在主机 machine
上 运行你可以使用 for loop
:
for con in `docker ps -q` ; do echo "$con" && docker exec -it $con ls -l; done