获取 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 descriptionVOLUME /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容器中的数据是持久化的。