我正在将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

以及Vault配置文件的内容:
{
            "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,
}

最佳答案

根据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
    
  • 为与绑定(bind)地址匹配的Vault服务器配置配置领事存储地址(本示例为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
    

  • 然后检查领事是否正确安装了该卷:
    $ docker inspect --format '{{ .Mounts }}' consul
    

    保管箱已将领事配置为存储:
    $ docker logs vault 2>&1 | grep Storage
                 Storage: consul (HA available)
    

    然后像往常一样初始化/解封金库。

    关于docker - 获取领事Docker镜像以与Vault数据保持一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52535751/

    10-12 18:25