Docker部署Vault从入门到实践
为什么选择用Docker部署Vault
Vault 是 HashiCorp 出品的密码&密钥管理工具,用Docker跑 Vault 能省去手动安装依赖的麻烦,升级、备份都很方便。
本文目标:让你从头到尾跑通一套可用的 Vault 单机版,并学会最基础的初始化、解封和读写密码。
准备工作:确认Docker环境和目录结构
在开始之前,请确认你的服务器上已经安装好 Docker(版本 20.10+ 比较稳)。
可以用下面的命令检查:
docker --version
如果没有安装,CentOS 用户可执行 yum install -y docker 并 systemctl start docker;
Ubuntu 用户用 apt install docker.io。
宝塔面板用户直接到“软件商店”安装 Docker 管理器即可。
接着创建 Vault 的数据目录和配置文件目录:
mkdir -p /opt/vault/data
mkdir -p /opt/vault/config
/opt/vault/data 用来存放 Vault 的加密数据,/opt/vault/config 放自定义配置。
核心步骤:拉取镜像并启动容器
第一步:拉取Vault官方镜像
docker pull vault:1.15
建议使用明确的小版本号,避免未来升级造成意外。
如果你偏好最新版,也可以写 latest,但最好固定版本。
第二步:生成一个简单的配置文件
新建 /opt/vault/config/vault.hcl,内容如下:
storage "raft" {
path = "/vault/data"
node_id = "node1"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = true
}
api_addr = "http://0.0.0.0:8200"
cluster_addr = "https://0.0.0.0:8201"
ui = true
这里 tls_disable = true 是为了测试方便,生产环境一定要配置 TLS 证书。ui = true 开启 Web 界面。
第三步:启动容器并挂载目录
docker run -d --name vault \
--restart=always \
-p 8200:8200 \
-p 8201:8201 \
-v /opt/vault/config:/vault/config \
-v /opt/vault/data:/vault/data \
-e VAULT_CONFIG_DIR=/vault/config \
-e VAULT_ADDR=http://127.0.0.1:8200 \
vault:1.15 server
参数解析:
--restart=always:容器崩溃或服务器重启后自动拉起。-p 8200:8200:监听 API 和 UI 端口。-v将宿主机目录挂载到容器内,确保配置文件和数据持久化。VAULT_CONFIG_DIR告诉 Vault 去哪个目录加载配置文件。
第四步:初始化Vault
容器启动后,进入容器初始化:
docker exec -it vault vault operator init
你会看到类似下面的输出:
Unseal Key 1: xxxxxxxxxx
Unseal Key 2: xxxxxxxxxx
Unseal Key 3: xxxxxxxxxx
Unseal Key 4: xxxxxxxxxx
Unseal Key 5: xxxxxxxxxx
Initial Root Token: s.xxxxxxxxxxxxx
请立即复制并安全保存这些Unseal Key和Root Token,丢了等于无法解封。
第五步:解封Vault
初始化后的 Vault 是密封状态,需要至少3个(默认阈值)Unseal Key 才能解封:
docker exec -it vault vault operator unseal
依次输入 Unseal Key 1、2、3,每输入一个按回车。
解封成功后终端会显示 Sealed: false。
避坑与常见问题
问题1:容器启动后立刻退出
通常是配置文件权限或路径错误。
检查容器日志:
docker logs vault --tail 20
如果提示 permission denied,确保 /opt/vault/data 目录容器用户可写。
可以在宿主机执行 chown 100:100 /opt/vault/data(Vault 容器内的用户 UID 常为 100)。
问题2:忘记Root Token
如果你丢失了 Root Token,唯一的办法是用 recovery keys(生产环境建议开启自动解封并定期备份 Token)。
测试环境可以重建容器重新初始化。
问题3:UI访问不了
检查防火墙是否放行了8200端口,并且容器启动命令中确认 -p 8200:8200。
浏览器访问 http://服务器IP:8200 即可看到登录界面。
效果验证:测试读写密码
1. 登录UI验证
打开浏览器访问 http://<服务器IP>:8200,用 Root Token 登录。
展开“Secret Engines”,如果看到 kv 默认引擎,说明部署成功。
2. 命令行验证(推荐)
设置环境变量后操作:
export VAULT_ADDR='http://127.0.0.1:8200'
export VAULT_TOKEN='你的RootToken'
写入一个密码:
docker exec -it vault vault kv put secret/myapp username=admin password=P@ssw0rd
读取密码:
docker exec -it vault vault kv get secret/myapp
如果能正常返回 Key Value 和对应的值,则 Vault 完全正常工作。
总结
本文从零开始演示了Docker部署Vault的全流程,包括容器启动、初始化、解封和UI/CLI验证。
记住三大要点:保存好Unseal Key和Root Token、生产环境必须配置TLS、定期备份存储路径 -v /opt/vault/data。
遇到异常时优先回看避坑和高频问题部分。
如果你正在处理 Docker部署Vault,建议先按本文步骤完整执行,再根据自己的环境做微调。