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

时间:2018-09-27 11:18:16

标签: docker consul hashicorp-vault

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

3 个答案:

答案 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

并且领事容器中的数据是持久的。