持久化Dockerized Consul KV Store跨集装箱运行

问题描述 投票:0回答:1

Mac OS在这里运行Docker Desktop。我试图让官方的Consul Docker image坚持其KV商店跨越运行。我使用以下命令运行该映像:

docker run -p 8500:8500 -v /Users/myuser/tmp/consul:/consul/data -d --name=dev-consul -e CONSUL_BIND_INTERFACE=eth0 consul

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

curl --request PUT --data "3" http://127.0.0.1:8500/v1/kv/456

然后我可以获取它以确保它在那里:

curl http://127.0.0.1:8500/v1/kv/456
true

但是一旦我停止了容器:

docker stop <containerId>

然后重新启动它:

docker restart <containerId>

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

但它绝对坚持了一些东西:

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商店在多个容器运行中持续存在?

docker consul docker-volume
1个回答
1
投票

在开发模式下运行Consul代理(服务器和客户端模式)不会保持任何状态。来自getting started guide

此模式对于快速轻松地启动单节点Consul环境非常有用。它不打算用于生产,因为它不会持续任何州。

在没有-server标志的情况下运行Consul代理将为您提供一个客户端,您可以在输出中的代理启动期间看到:

==> Starting Consul agent...
==> Consul agent running!
      Version: 'v1.4.1'
      Node ID: '<uuid>'
      Node Name: 'node-name'
      Datacenter: 'dc1'
      Server: false (Bootstrap: false)

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

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/中看到以下文件和目录:

checkpoint-signature  node-id  proxy  raft  serf

如果您尝试将数据放入KV存储区并重新启动与data-dir具有相同卷的容器,则应在此处存储先前存储的数据。

© www.soinside.com 2019 - 2024. All rights reserved.