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

时间:2019-07-04 04:50:15

标签: docker

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

我尝试使用此功能:

docker exec $(docker ps -q) bash -c "cd /var/www/html && git pull"

但是会出错:

OCI runtime exec failed: exec failed: container_linux.go:345: starting container process caused "exec: \"606a1083d0be\": executable file not found in $PATH": unknown

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

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

511c76a25dcc
995bd453c467

3 个答案:

答案 0 :(得分:1)

我假设您有多个容器在运行,并且$(docker ps -q)扩展到some_container1 606a1083d0be,并将606a1083d0be当作您要运行的命令,该命令不存在。您可以单独发布docker ps -q的输出以确认吗?另外,如果您只需要最新的容器ID,请尝试替换$(docker ps -ql)

编辑:响应您的确认,我所说的正是事实。至于为什么以前起作用,那么那时您可能只运行了一个容器。

答案 1 :(得分:1)

使用Docker exec可以一次在容器上运行该命令,但是从您的问题中想在所有运行的容器上运行该命令,

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

我认为git已经安装在所有正在运行的容器中,并且全部基于bash

或更紧凑的形式可以

for i in `docker ps -q`; do docker exec -it $i bash -c 'cd /var/www/html && git pull'; done

答案 2 :(得分:0)

尝试使用绝对路径运行git命令,有时有助于docker使用二进制的绝对路径:

也请看一下这份备忘单:(我在使用docker时总是使用它) https://gist.github.com/ruanbekker/4e8e4ca9b82b103973eaaea4ac81aa5f

我建议您从github下载代码并将其放在一个卷中,该卷指向本地计算机上的目录。这样,您可以直接在自己的计算机上处​​理代码,并在使用代码时与git交互。这样,docker容器可以通过该卷直接从github访问代码。还可以查看将git与docker结合使用的一些好的做法,出于安全原因,您可能想在部署代码之前删除所有.git文件。如果您需要帮助将源代码放入一个卷中,请告诉我。