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

如何用Docker Compose休眠容器以保留SSH密钥等内存状态?

解决nardeas/ssh-agent容器密钥持久化问题

Docker本身没有原生的“休眠容器并保存内存状态”的常规可用功能——容器的设计核心是基于镜像层的无状态运行,内存中的数据会随容器停止而清空。不过你有两种可靠方式实现密钥持久化,不用每次重启都手动执行ssh-add:

方案一:挂载密钥文件并自动加载(推荐)

这个方案通过数据卷挂载本地密钥文件到容器,再自定义启动脚本让容器启动时自动加载密钥,完全避开内存依赖,稳定且易维护。

Docker Compose 配置

version: '3.8'

services:
  ssh-agent:
    image: nardeas/ssh-agent
    volumes:
      # 挂载本地私钥文件到容器内(ro表示只读,降低风险)
      - ~/.ssh/id_rsa:/root/.ssh/id_rsa:ro
      # 挂载自定义启动脚本
      - ./start-ssh-agent.sh:/start-ssh-agent.sh:ro
    command: ["/bin/sh", "/start-ssh-agent.sh"]
    # 保持容器前台运行的必要配置
    tty: true
    stdin_open: true

配套启动脚本 start-ssh-agent.sh

#!/bin/sh
# 启动ssh-agent并设置环境变量
eval $(ssh-agent -s)
# 自动添加挂载的私钥(多密钥可重复添加行)
ssh-add /root/.ssh/id_rsa
# 保持容器持续运行
tail -f /dev/null

使用说明:

  1. 确保你的私钥文件(比如id_rsa)存放在本地~/.ssh目录下
  2. 给启动脚本添加执行权限:chmod +x start-ssh-agent.sh
  3. 启动容器:docker-compose up -d

之后每次容器重启,都会自动加载密钥,无需手动执行ssh-add操作。

方案二:使用Docker Checkpoint/Restore(实验性)

如果你坚持要保存容器内存状态,Docker的实验性功能checkpoint可以实现类似“休眠”的效果,但绝对不推荐用于生产环境——该功能尚不稳定,且依赖特定内核支持(需要CRIU工具)。

配置步骤

  1. 开启Docker实验性功能:修改/etc/docker/daemon.json文件,添加以下内容:
{
  "experimental": true
}

修改后重启Docker服务:systemctl restart docker

  1. 容器运行中,创建checkpoint保存当前内存状态:
docker checkpoint create ssh-agent_ssh-agent_1 my-ssh-agent-checkpoint

(ssh-agent_ssh-agent_1是容器的实际名称,需根据你的环境替换)

  1. 容器停止后,通过checkpoint恢复之前的状态:
docker start --checkpoint my-ssh-agent-checkpoint ssh-agent_ssh-agent_1

注意事项:

  • 宿主机内核必须支持CRIU工具,部分发行版需要手动安装
  • Docker版本升级、内核更新后,已创建的checkpoint可能失效
  • 仅能对停止状态的容器创建checkpoint

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:10:18