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

Hashicorp Vault容器重启Docker Compose后本地卷未保存秘钥问题

Hashicorp Vault容器数据持久化问题解决方法

你的问题根源很明确:你用的是Vault的开发模式(vault server -dev),这个模式是为快速测试设计的,所有数据默认存在内存里,哪怕你挂载了vault-file卷,开发模式也不会把数据写入到磁盘目录,所以docker-compose down后内存里的数据直接丢失。

要解决持久化问题,必须放弃开发模式,改用生产模式配置,让Vault将数据写入挂载的卷中。下面是具体步骤:

1. 修改docker-compose.yml配置

去掉开发模式相关的环境变量(VAULT_DEV_*),改用生产模式启动,并指定文件存储后端。这里提供两种配置方式:

方式一:使用配置文件(推荐,更灵活)

先在本地创建vault-config目录,然后创建vault-config/config.hcl配置文件,内容如下:

storage "file" {
  path = "/vault/file"  # 对应挂载的卷目录
}

listener "tcp" {
  address = "0.0.0.0:8200"
  tls_disable = 1  # 测试环境临时关闭TLS,生产环境务必开启
}

ui = true  # 可选,开启Web UI方便操作

然后修改docker-compose.yml:

version: '3.7'

services:
  vault:
      image: vault:latest
      volumes:
        - vault-file:/vault/file
        - ./vault-config:/vault/config
      ports:
        - "8200:8200/tcp"
      environment:
        VAULT_ADDR: 'http://0.0.0.0:8200'
      cap_add:
        - IPC_LOCK
      container_name: vault
      entrypoint: "vault server -config=/vault/config/config.hcl"

volumes:
     vault-file: {}

方式二:直接在启动命令中指定存储后端(快速测试用)

如果不想写配置文件,可以直接修改entrypoint,让Vault用文件存储启动:

version: '3.7'

services:
  vault:
      image: vault:latest
      volumes:
        - vault-file:/vault/file
      ports:
        - "8200:8200/tcp"
      cap_add:
        - IPC_LOCK
      container_name: vault
      entrypoint: "vault server -storage-file=/vault/file -listener=tcp://0.0.0.0:8200 -tls-disable=1"

volumes:
     vault-file: {}

2. 启动后的必要操作

生产模式下Vault不会自动初始化,启动容器后需要手动完成初始化和unseal:

  • 进入容器:docker exec -it vault sh
  • 初始化Vault:vault operator init

    执行后会生成5个 unseal 密钥和1个根令牌,务必把这些信息保存好,丢失的话数据无法恢复

  • 执行unseal(需要用3个不同的密钥):
    vault operator unseal <第一个密钥>
    vault operator unseal <第二个密钥>
    vault operator unseal <第三个密钥>
    
  • 登录Vault:vault login <根令牌>

之后再存入密钥,执行docker-compose down再启动,数据就会保存在vault-file卷中不会丢失了。

额外提示

  • 开发模式(-dev)仅适合临时测试,绝对不能用于需要持久化数据的场景
  • 如果只是想临时测试开发模式下的持久化,可以添加-dev-storage-dir=/vault/file参数,让开发模式把数据写到指定目录,但这依然不是生产环境的正确用法
  • 生产环境建议使用更可靠的存储后端(比如Consul、云存储),并配置自动unseal(如AWS KMS、Azure Key Vault)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:39:18