繁体   English   中英

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

[英]Docker exec on all running containers

我正在服务器上运行多个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

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

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

使用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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM