我正在将Vault Docker映像与Consul Docker映像用作其存储。 我的问题是,如果应该将Consul容器关闭,而我将尝试运行新的容器,则需要重新初始化Vault,而Consul保存的数据会丢失。
有人知道我需要做什么才能使数据持久化吗?
运行Consul映像的命令:
docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp -it consul
运行保险柜图片的命令:
docker run -d -p 8200:8200 -v /root/vault:/vault --cap-add=IPC_LOCK vault server
文件库配置文件的内容:
{
"listener": [{
"tcp": {
"address": "0.0.0.0:8200",
"tls_disable" : 1
}
}],
"storage" :{
"consul" : {
"address" :"172.17.0.4:8500"
"path" :"vault/"
}
}
"max_lease_ttl": "10h",
"default_lease_ttl": "10h",
"ui": true,
}
答案 0 :(得分:2)
您需要cause the Consul container to persist its /consul/data
directory。 (该Hashicorp文档还建议单独备份Consul。)一种典型的方法是更改您的docker run
命令
docker run -v ./consul:/consul/data ... consul
(如果您使用相同的选项启动相同的容器,则可能会将映像设置为在后台进行尝试,但是最好是明确地对此进行重复处理,以便知道要备份的目录上。)
答案 1 :(得分:2)
根据consul's docker description,在开发模式下,VOLUME /consul/data
不会以任何方式使用,这是领事代理的默认设置。
要运行以服务器模式运行的1个领事代理+ 1个保管库服务器(即not recommended)的沙箱,可以:
对领事使用永久卷并将其安装在容器上:
docker volume create consul --label description='Persistent data for consul'
启动领事容器:
docker run -d \
-p 8400:8400 -p 8500:8500 -p 8600:53/udp \
--net host \
--mount type=volume,source=consul,target=/consul/data \
--name consul \
-it consul agent -server -bind=127.0.0.1 -bootstrap-expect=1
为与绑定地址匹配的Vault服务器配置配置领事存储地址(在本示例中为127.0.0.1
)
"storage" :{
"consul" : {
"address" :"127.0.0.1:8500"
运行保险柜映像:
docker run -d \
-p 8200:8200 \
-v /root/vault:/vault \
--cap-add=IPC_LOCK \
--net host \
--name vault \
vault server
然后检查领事是否正确安装了卷:
$ docker inspect --format '{{ .Mounts }}' consul
保险柜已将领事配置为存储空间
$ docker logs vault 2>&1 | grep Storage
Storage: consul (HA available)
然后像往常一样初始化/解封金库。
答案 2 :(得分:2)
最终我做了以下事情:
为领事创建持久卷并将其安装在容器上
docker volume create consul-volume --label description='Persistent data for consul'
为领事创建local.json配置文件:
{
"log_level": "DEBUG",
"server": true,
"ui": true,
"bootstrap": true,
"client_addr":"0.0.0.0"
}
运行领事容器:
docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp --net mynet -v /root/vault/consul:/consul --mount type=volume,source=consul-volume,target=/consul/data --name consul -it consul agent
运行保管库容器:
docker run -d -p 8200:8200 -v /root/vault:/vault --cap-add=IPC_LOCK vault server
并且领事容器中的数据是持久的。