我正在服务器上运行多个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
答案 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文件。如果您需要帮助将源代码放入一个卷中,请告诉我。