首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跨集装箱运行持久化领事KV商店

跨集装箱运行持久化领事KV商店
EN

Stack Overflow用户
提问于 2019-03-29 14:39:53
回答 1查看 1.3K关注 0票数 2

Mac在这里运行Desktop。我正试图让官方的领事码头形象在运行期间坚持它的KV商店。我使用以下命令运行该映像:

代码语言:javascript
运行
复制
docker run -p 8500:8500 -v /Users/myuser/tmp/consul:/consul/data -d --name=dev-consul -e CONSUL_BIND_INTERFACE=eth0 consul

输入该命令后,我可以在那里存储一个KV对:

代码语言:javascript
运行
复制
curl --request PUT --data "3" http://127.0.0.1:8500/v1/kv/456

然后我可以把它拿来确保它在那里:

代码语言:javascript
运行
复制
curl http://127.0.0.1:8500/v1/kv/456
true

但一旦我把集装箱停下来:

代码语言:javascript
运行
复制
docker stop <containerId>

然后重新启动:

代码语言:javascript
运行
复制
docker restart <containerId>

如果再次尝试获取它(使用相同的卷曲获取),就消失了!,我认为我在docker run命令中指定的-v /Users/myuser/tmp/consul:/consul/data会提示领事将KV存储持久化到我的机器上的那个本地目录,不是吗?

不过,它确实坚持了一些东西:

代码语言:javascript
运行
复制
ls -al ~/tmp/consul/
-rw-------   1 myuser  staff    36 Mar 28 20:35 node-id
drwx------   3 myuser  staff    96 Mar 28 20:35 proxy

为了使KV存储在多个容器运行中持续存在,我需要做什么?

EN

回答 1

Stack Overflow用户

发布于 2019-03-29 16:29:06

在开发模式下运行领事代理(服务器和客户端模式)并不会保持任何状态。来自入门指南

这种模式对于快速、方便地创建单节点领事环境是非常有用的.它不打算用于生产,因为它不持久化任何状态。

在没有-server标志的情况下运行领事代理将为您提供一个客户端,正如您在代理开始时在输出中看到的那样:

代码语言:javascript
运行
复制
==> Starting Consul agent...
==> Consul agent running!
      Version: 'v1.4.1'
      Node ID: '<uuid>'
      Node Name: 'node-name'
      Datacenter: 'dc1'
      Server: false (Bootstrap: false)

因此,对于单个实例服务器,您需要这样的命令(请注意-bootstrap选项,它将使领事自动选择它作为集群领导者,因此您将拥有可操作的单个服务器“集群”)

代码语言:javascript
运行
复制
docker run -p 8500:8500 -v /Users/myuser/tmp/consul:/consul/data -d --name=dev-consul -e CONSUL_BIND_INTERFACE=eth0 consul  agent -server  -data-dir=/consul/data -bootstrap

现在您应该可以在~/tmp/consul/中看到以下文件和目录:

代码语言:javascript
运行
复制
checkpoint-signature  node-id  proxy  raft  serf

如果您尝试将数据放入与data-dir相同容量的KV存储和重新启动容器中,您应该将先前存储的数据保存在那里。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55419824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档