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

Docker Compose配置Vault的差异及生产模式持久化问题求助

解决方案:Docker Compose配置生产模式Vault实现持久化+UI访问

先明确你两个配置的核心问题

vault-server配置的问题

你虽然挂载了卷,但环境变量里加了VAULT_DEV_ROOT_TOKEN_ID,这个变量会强制Vault以Dev模式启动。Dev模式默认用内存存储所有数据,挂载的./vault/file卷完全没用,所以容器重启后数据必然丢失。Dev模式默认启用Web UI,所以你能访问http://localhost:8204/ui/。

vault_dev配置的问题

你用entrypoint: vault server -dev明确指定了Dev模式,同时设置VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:8205",但端口映射是8205:8200——容器内Vault监听的是8205端口,你却把主机的8205映射到容器的8200,端口不匹配,自然访问不了UI。而且同样是Dev模式,持久化根本不生效。

实现三个需求的正确配置

要满足生产模式、持久化、UI访问,必须完全抛弃Dev模式的所有配置,用Vault的生产模式配置文件+正确的容器挂载。

1. 准备Vault配置文件

在你的Docker Compose同级目录下创建vault/config文件夹,里面新建config.hcl文件,内容如下:

# 存储后端:用文件存储,对应容器内的/vault/file目录
storage "file" {
  path = "/vault/file"
}

# 监听配置:开启HTTP服务,允许外部访问,启用Web UI
listener "tcp" {
  address     = "0.0.0.0:8200"
  tls_disable = 1  # 测试用可以关闭TLS,生产环境建议开启
}

# 启用Web UI
ui = true

# 如果没有添加IPC_LOCK权限,可以开启这个(二选一)
# disable_mlock = true

2. Docker Compose配置

替换你原来的配置,用下面的内容:

version: '3.8'
services:
  vault-server:
    image: vault:latest
    ports:
      - "8200:8200"
    environment:
      VAULT_ADDR: "http://0.0.0.0:8200"
    cap_add:
      - IPC_LOCK  # 锁定内存,防止Vault内存被交换到磁盘,增强安全性
    volumes:
      - ./vault/config:/vault/config:ro  # 只读挂载配置文件
      - ./vault/file:/vault/file:rw      # 读写挂载数据存储目录
      - ./vault/logs:/vault/logs:rw      # 日志目录(可选)
    command: vault server -config=/vault/config/config.hcl

3. 启动后的关键操作(生产模式必须做)

生产模式下Vault启动后是密封状态,不能直接使用,必须完成初始化和 unseal:

  1. 启动容器:docker-compose up -d
  2. 进入容器执行初始化命令:
    docker exec -it vault-server vault operator init
    
    执行后会输出5个 unseal密钥和1个根令牌,一定要保存好这些内容——丢失的话就无法恢复Vault里的数据。
  3. 执行 unseal操作(需要用3个不同的 unseal密钥):
    docker exec -it vault-server vault operator unseal <第一个密钥>
    docker exec -it vault-server vault operator unseal <第二个密钥>
    docker exec -it vault-server vault operator unseal <第三个密钥>
    
  4. 用根令牌登录:
    docker exec -it vault-server vault login <根令牌>
    
    之后就可以正常创建密钥、配置Vault了,所有数据都会存在./vault/file目录下,容器重启后不会丢失。

4. 访问Web UI

完成unseal后,直接访问http://localhost:8200/ui/,用之前生成的根令牌登录即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:01:06