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

Github Actions通过SSH部署Docker镜像后任务挂起如何解决

问题原因

你当前的脚本虽然加了&将命令放到后台运行,但后台进程的标准输出(stdout)、标准错误(stderr)仍然绑定在当前SSH会话上,appleboy/ssh-action会等待所有关联的输出流完全关闭后才会结束任务,因此会一直处于挂起状态。此外你没有给docker run命令加后台运行参数,容器默认会以前台模式运行,也是导致挂起的核心原因之一。

修复方案

推荐优先使用Docker原生的detached模式运行容器,无需依赖shell的后台机制:

  • 修改最后一行docker run命令,添加-d参数,启动后直接返回容器ID,自动脱离当前会话,同时补充--name参数保证后续可以正常停止对应容器:
script: |
  # 优化:强制删除容器,即使容器不存在也不会报错中断流程
  docker rm -f ss-timmy || true
  docker pull spaceturtle0/ss-timmy:latest
  # -d 参数表示后台运行容器,日志可通过docker logs命令后续查看
  docker run -d --name ss-timmy --env-file=Timmy-SchoolSimplified/.env  spaceturtle0/ss-timmy

如果有特殊场景必须以前台模式运行容器,可以用以下方式彻底切断进程与会话的关联:

  • 将输出全部重定向到空设备,搭配nohup让进程忽略SSH挂起信号:
nohup docker run --name ss-timmy --env-file=Timmy-SchoolSimplified/.env spaceturtle0/ss-timmy > /dev/null 2>&1 &

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:45:02