获取 consul Docker 图像以与 Vault 数据保持一致
Get consul Docker image to be persistent with Vault data
我正在使用带有 Consul Docker 图像的 Vault Docker 图像作为其存储。
我的问题是,如果据说 Consul 容器会宕机,我会尝试 运行 一个新容器,我需要重新初始化保险库,Consul 保存的数据会丢失。
有人知道我需要做什么才能使数据持久化吗?
向 运行 Consul 图像发出命令:
docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp -it consul
对 运行 Vault 映像的命令:
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,
}
你需要cause the Consul container to persist its /consul/data
directory。 (Hashicorp 文档还建议单独备份 Consul。)典型的方法是更改 docker run
命令
docker run -v ./consul:/consul/data ... consul
(如果您使用相同的选项启动相同的容器,图像可能被设置为在您背后尝试此操作,但最好明确说明这一点,加倍这样才能知道目录是什么备份。)
根据 consul's docker description,VOLUME /consul/data
在开发模式下不以任何方式使用,这是 consul agent 的默认设置。
对于 运行 1 个 consul agent 运行 服务器模式的沙箱 + 1 个保险库服务器(即 not recommended),您可以:
为consul使用持久卷并将其挂载到容器上:
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服务器配置的consul存储地址(本例为127.0.0.1
):
"storage" :{
"consul" : {
"address" :"127.0.0.1:8500"
运行 Vault 图片:
docker run -d \
-p 8200:8200 \
-v /root/vault:/vault \
--cap-add=IPC_LOCK \
--net host \
--name vault \
vault server
然后检查 consul 是否正确安装卷:
$ docker inspect --format '{{ .Mounts }}' consul
Vault 已将 consul 配置为存储:
$ docker logs vault 2>&1 | grep Storage
Storage: consul (HA available)
然后 init/unseal 照常跳伞。
最终我做了以下事情:
为 consul 创建持久卷并将其挂载到容器上:
docker volume create consul-volume --label description='Persistent data for consul'
为 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
并且consul容器中的数据是持久化的。
我正在使用带有 Consul Docker 图像的 Vault Docker 图像作为其存储。 我的问题是,如果据说 Consul 容器会宕机,我会尝试 运行 一个新容器,我需要重新初始化保险库,Consul 保存的数据会丢失。
有人知道我需要做什么才能使数据持久化吗?
向 运行 Consul 图像发出命令:
docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp -it consul
对 运行 Vault 映像的命令:
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,
}
你需要cause the Consul container to persist its /consul/data
directory。 (Hashicorp 文档还建议单独备份 Consul。)典型的方法是更改 docker run
命令
docker run -v ./consul:/consul/data ... consul
(如果您使用相同的选项启动相同的容器,图像可能被设置为在您背后尝试此操作,但最好明确说明这一点,加倍这样才能知道目录是什么备份。)
根据 consul's docker description,VOLUME /consul/data
在开发模式下不以任何方式使用,这是 consul agent 的默认设置。
对于 运行 1 个 consul agent 运行 服务器模式的沙箱 + 1 个保险库服务器(即 not recommended),您可以:
为consul使用持久卷并将其挂载到容器上:
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服务器配置的consul存储地址(本例为
127.0.0.1
):"storage" :{ "consul" : { "address" :"127.0.0.1:8500"
运行 Vault 图片:
docker run -d \ -p 8200:8200 \ -v /root/vault:/vault \ --cap-add=IPC_LOCK \ --net host \ --name vault \ vault server
然后检查 consul 是否正确安装卷:
$ docker inspect --format '{{ .Mounts }}' consul
Vault 已将 consul 配置为存储:
$ docker logs vault 2>&1 | grep Storage
Storage: consul (HA available)
然后 init/unseal 照常跳伞。
最终我做了以下事情:
为 consul 创建持久卷并将其挂载到容器上:
docker volume create consul-volume --label description='Persistent data for consul'
为 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
并且consul容器中的数据是持久化的。