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

开发模式下Vault能否不使用in memory存储?Docker部署数据丢失如何解决

问题根源

你当前使用的Vault Docker镜像默认以开发服务器模式启动,该模式下所有数据仅存储在内存中,即使配置了持久化卷也不会写入磁盘,因此设备或容器重启后数据会全部丢失。

解决方案步骤

1. 新增Vault配置文件

在你的docker-compose.yml同级目录下创建config文件夹,在文件夹内新建vault.hcl配置文件,指定磁盘持久化存储:

storage "file" {
  path = "/vault/file"
}

listener "tcp" {
  address     = "0.0.0.0:8200"
  tls_disable = 1
}

api_addr = "http://127.0.0.1:8200"
disable_mlock = true

本地测试场景下开启disable_mlock可避免内存锁定权限问题,生产环境不建议开启。

2. 修改docker-compose.yml配置

调整vault服务的启动命令,挂载新增的配置文件,移除开发模式专属的环境变量:

version: "3.8"
services:
    vault:
        env_file:
            - .env
        networks:
            - public
        image: vault
        # 覆盖默认启动命令,使用配置文件启动服务模式
        command: server -config=/vault/config/vault.hcl
        restart: unless-stopped
        ports:
            - 8200:8200
        cap_add:
            - IPC_LOCK            
        container_name: "${TARGET_ENVIRONMENT}_${COMPOSE_PROJECT_NAME}_vault"
        volumes:
            - ./config:/vault/config
            - vault-logs:/vault/logs
            - vault-file:/vault/file
        labels:
            - "traefik.enable=true"
            - "traefik.http.routers.vault.service=vault"
            - "traefik.http.routers.vault.entrypoints=https"
            - "traefik.http.routers.vault.rule=Host(`vault.${HOST_URL}`)"
            - "traefik.http.routers.vault.tls=true"
            - "traefik.http.routers.vault.tls.certresolver=letsEncrypt"
            - "traefik.http.services.vault.loadbalancer.server.port=8200"
volumes:
    vault-logs: 
    vault-file:
networks:
    public:
        external: true

同时修改你的.env文件,删除开发模式专属的VAULT_DEV_ROOT_TOKEN_ID配置:

COMPOSE_PROJECT_NAME=vault
VAULT_ADDR=http://127.0.0.1:8200

3. 首次启动初始化

启动容器后执行以下操作完成初始化,后续重启无需重复操作:

  • 执行初始化命令:docker exec -it 你的容器名 vault operator init
  • 终端会输出5个解封密钥和1个Root Token,将这些内容妥善保存在本地
  • 依次执行3次解封命令:docker exec -it 你的容器名 vault operator unseal 你保存的解封密钥,每次输入一个不同的密钥
  • 解封完成后即可正常使用Vault,所有密钥会持久化存储在本地Docker卷中,重启不会丢失

如果本地测试不想每次重启容器都手动解封,可以写个简单的本地脚本自动执行解封命令即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:48:01