获取 consul Docker 映像以与 Vault 数据保持一致

dan*_*man 5 docker consul hashicorp-vault

我使用 Vault Docker 镜像和 Consul Docker 镜像作为它的存储。我的问题是,如果假设 Consul 容器会崩溃,我将尝试运行一个新容器,我需要重新初始化保管库,Consul 保存的数据会丢失。

任何人都知道我需要做什么才能使数据持久化?

运行 Consul 镜像的命令:

docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp -it consul
Run Code Online (Sandbox Code Playgroud)

运行 Vault 映像的命令:

docker run -d -p 8200:8200 -v /root/vault:/vault --cap-add=IPC_LOCK vault server
Run Code Online (Sandbox Code Playgroud)

以及保管库配置文件内容:

{
            "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,
}
Run Code Online (Sandbox Code Playgroud)

dan*_*man 2

最终我做了以下事情:

为 consul 创建持久卷并将其挂载到容器上:

docker volume create consul-volume --label description='Persistent data for consul'
Run Code Online (Sandbox Code Playgroud)

为 consul 创建 local.json 配置文件:

{
    "log_level": "DEBUG",
    "server": true,
    "ui": true,
    "bootstrap": true,
    "client_addr":"0.0.0.0"
}
Run Code Online (Sandbox Code Playgroud)

运行领事容器:

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
Run Code Online (Sandbox Code Playgroud)

运行保管库容器:

docker run -d -p 8200:8200 -v /root/vault:/vault --cap-add=IPC_LOCK vault server
Run Code Online (Sandbox Code Playgroud)

并且consul容器中的数据是持久化的。