所有正在运行的容器上的 Docker exec

ajg*_*702 2 docker

我正在服务器上运行多个 docker 容器,并且需要对所有容器上的存储库执行 git pull 。

我尝试过使用这个:

docker exec $(docker ps -q) bash -c "cd /var/www/html && git pull"
Run Code Online (Sandbox Code Playgroud)

但它出错了:

OCI runtime exec failed: exec failed: container_linux.go:345: starting container process caused "exec: \"606a1083d0be\": executable file not found in $PATH": unknown
Run Code Online (Sandbox Code Playgroud)

它曾经工作过,但后来突然停止工作,没有明显的原因(我没有更改任何docker配置)

注意:输出docker ps -q仅是容器 ID:

511c76a25dcc
995bd453c467
Run Code Online (Sandbox Code Playgroud)

Adi*_*iii 5

使用 Docker exec,您可以一次在一个容器上运行该命令,但从您的问题来看,您想在所有正在运行的容器上运行该命令,就这样吧。

    for containerId in $(docker ps -q)
    do
        docker exec -it $containerId bash -c 'cd /var/www/html && git pull'
    done
Run Code Online (Sandbox Code Playgroud)

我假设 git 已经安装在所有正在运行的容器中并且都基于 bash

或者更紧凑的形式可以是

for i in `docker ps -q`; do docker exec -it $i bash -c 'cd /var/www/html && git pull'; done
Run Code Online (Sandbox Code Playgroud)