如何一次性重建所有运行中的Docker容器?日志驱动更新配置生效需求
批量重建多目录下的Docker Compose容器方案
修改Docker日志驱动后,需重建容器才能让配置生效。针对分散在多个目录的应用,无需逐个手动进入目录执行命令,可通过以下几种方案批量操作:
方案1:一次性Shell循环执行
直接在终端运行以下命令,遍历所有目标目录并执行容器重建操作:
for dir in /home/docker/folder1 /home/docker/folder2 /home/docker/folder3; do cd "$dir" && /usr/local/bin/docker-compose down && /usr/local/bin/docker-compose up -d done
该命令会依次进入每个指定目录,先停止并移除容器,再后台启动新容器,确保每个目录的docker-compose.yml被正确加载。
方案2:通配符匹配目录(适用于目录命名有规律的场景)
如果目标目录命名有统一前缀(比如都是folder开头),可以用通配符简化目录列表,同时增加目录存在性检查避免出错:
for dir in /home/docker/folder*; do [ -d "$dir" ] && cd "$dir" && /usr/local/bin/docker-compose down && /usr/local/bin/docker-compose up -d done
方案3:编写Shell脚本复用
若后续需要重复执行该操作,可创建一个可复用的脚本文件:
- 创建脚本文件
rebuild_containers.sh:
#!/bin/bash # 定义需要处理的目录列表 target_dirs=( "/home/docker/folder1" "/home/docker/folder2" "/home/docker/folder3" ) for dir in "${target_dirs[@]}"; do if [ -d "$dir" ]; then echo "开始处理目录: $dir" # 进入目录失败则跳过当前目录 cd "$dir" || { echo "无法进入目录 $dir,跳过"; continue; } /usr/local/bin/docker-compose down /usr/local/bin/docker-compose up -d echo "目录 $dir 处理完成" else echo "警告:目录 $dir 不存在,已跳过" fi done
- 给脚本添加执行权限:
chmod +x rebuild_containers.sh
- 执行脚本:
./rebuild_containers.sh
补充说明
你之前直接执行/usr/local/bin/docker-compose down报错,原因是docker-compose默认会在当前工作目录查找docker-compose.yml或docker-compose.yaml文件,若当前目录没有对应配置文件,就会触发找不到配置的错误。上述方案通过进入目标目录,解决了这个问题。
内容的提问来源于stack exchange,提问作者Babak
相关产品推荐
相关产品推荐

