You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重启多组docker-compose进程中带特定标签的actions_1服务

仅重启Docker分组下actions服务的Shell脚本实现

问题背景

当前同时运行2组Docker服务,执行docker ps返回的运行容器列表如下:

CONTAINER ID   IMAGE                 COMMAND                  CREATED              STATUS              PORTS                                           NAMES
0a8e26682915   image_name:latest   "bash -c 'pip instal…"   About a minute ago   Up About a minute                                                   process_name_1_actions_1
ed8b56ff29b1   image_name:latest   "bash -c 'cd live-bo…"   About a minute ago   Up About a minute   0.0.0.0:5005->5005/tcp, :::5005->5005/tcp       process_name_1_model_1
6d8016412d12   image_name:latest   "bash -c 'pip instal…"   About a minute ago   Up About a minute                                                   process_name_2_actions_1
128d3605297a   image_name:latest   "bash -c 'cd live-bo…"   About a minute ago   Up About a minute   0.0.0.0:5006->5005/tcp, :::5006->5005/tcp       process_name_2_model_1

所有容器名称都携带分组标识:后缀为_model_1的服务启动耗时很长,后缀为_actions_1的服务需要频繁重启且启动速度快。全量执行docker-compose down再docker-compose up重启整套服务的流程繁琐低效,需要实现遍历进程组、仅重启每组对应actions_1服务的脚本。

具体实现

注意脚本框架中数组的分组名需要和实际容器名前缀保持一致,示例中容器名前缀为process_name_x,直接替换数组内容即可。

方案1:直接匹配容器名重启(无路径依赖)

不需要依赖docker-compose.yml文件位置,直接通过Docker接口匹配目标容器执行重启,适配性更强:

# 填入需要操作的服务分组前缀,必须和容器名前缀完全一致
declare -a arr=("process_name_1" "process_name_2")

for i in "${arr[@]}"
do
    target_container="${i}_actions_1"
    echo "正在重启服务: ${target_container}"
    # 先校验容器是否存在,避免执行报错
    if docker ps -a --format '{{.Names}}' | grep -q "^${target_container}$"; then
        docker restart "${target_container}"
        # 如需重启后确认运行状态,可放开下方注释
        # docker inspect -f '{{.Name}} 运行状态: {{.State.Status}}' "${target_container}"
    else
        echo "警告: 未找到容器 ${target_container},已跳过"
    fi
done

方案2:使用Docker Compose原生命令重启

如果你在docker-compose.yml对应的工作目录下操作,推荐用compose原生命令定向重启服务,重启时会自动加载compose中配置的环境变量、挂载规则、重启策略,和手动操作compose重启单个服务的效果完全一致:

# 填入需要操作的服务分组前缀
declare -a arr=("process_name_1" "process_name_2")
# 填写docker-compose.yml文件的实际路径
COMPOSE_CONF_PATH="./docker-compose.yml"

for i in "${arr[@]}"
do
    target_service="${i}_actions_1"
    echo "正在重启分组 ${i} 的actions服务"
    docker compose -f "${COMPOSE_CONF_PATH}" restart "${target_service}"
done

使用说明

  • 先给脚本添加可执行权限:chmod +x restart_actions.sh
  • 直接执行脚本即可完成定向重启:./restart_actions.sh
  • 两种方案选型参考:
    • 容器直接操作方案:不依赖compose配置文件路径,只要目标容器存在即可执行,适合compose文件分散、容器被手动启动的场景
    • Compose原生命令方案:完全对齐compose服务管理逻辑,不会丢失配置参数,适合所有服务都通过统一compose文件管理的场景

内容的提问来源于stack exchange,提问作者Steinn Hauser Magnússon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:33:16