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

如何在Shell脚本中创建新Shell实例运行两个Docker相关脚本

在独立Shell中运行两个Docker脚本的方案

方案1:拆分脚本为独立文件,用启动脚本统一唤起

把两个逻辑拆成单独的脚本文件,再写个启动脚本让它们分别在新终端窗口运行:

  1. 编写start_container.sh(对应你的脚本1):
#!/bin/bash
# 启动容器,根据需求选择方式:
# 推荐用-d参数让容器后台运行,脚本执行完容器也不会停止
docker run -d --name my_target_container <你的镜像名> <容器内持久化运行的命令>
# 如果必须前台运行容器(比如交互式服务),加&放到后台:
# docker run --name my_target_container <你的镜像名> <服务命令> &
  1. 编写enter_container.sh(对应你的脚本2):
#!/bin/bash
# 等待2秒确保容器启动就绪,避免直接exec报错
sleep 2
docker exec -it my_target_container /bin/bash
  1. 编写启动脚本launch_both.sh:
#!/bin/bash
# 用xterm打开新窗口运行脚本1,后台执行不阻塞
xterm -e sh start_container.sh &
# 打开新窗口运行脚本2
xterm -e sh enter_container.sh

如果你用的不是xterm,替换成对应终端命令即可:比如GNOME用gnome-terminal -- sh start_container.sh &,KDE用konsole -e sh start_container.sh &

给所有脚本添加执行权限:

chmod +x start_container.sh enter_container.sh launch_both.sh

运行./launch_both.sh就能看到两个独立终端窗口分别执行对应脚本。

方案2:直接用后台命令串联

不想拆分多个文件的话,直接用&将脚本1放到后台,再运行脚本2:

命令行直接执行:

sh script1.sh & sh script2.sh

或者写入单个脚本run_both.sh:

#!/bin/bash
sh script1.sh &
sh script2.sh

注意:这种方式下,脚本1是在当前Shell的后台进程运行,并非新开终端窗口;脚本2在当前Shell前台运行。如果需要完全独立的新终端窗口,方案1更贴合需求。

几个关键细节

  • 脚本1中的docker run:如果使用-d参数,容器会后台运行,脚本执行完毕后容器依然保持运行,无需脚本持续驻留;如果必须前台运行容器,一定要加&让进程后台化,否则会阻塞后续命令执行。
  • 脚本2中的sleep不可省略,容器启动需要短暂时间,直接执行docker exec大概率会因容器未就绪报错。

内容的提问来源于stack exchange,提问作者BashingScripts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:11:00