[英]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.