docker - 跨容器运行持久保存 Dockerized Consul KV Store

标签 docker consul docker-volume

此处运行 Docker Desktop 的 Mac OS。我正在尝试让官方 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>

并且尝试再次获取它(使用与上面相同的curl来获取),它消失了!我认为我在-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 存储在多个 容器运行?

最佳答案

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

This mode is useful for bringing up a single-node Consul environment quickly and easily. It is not intended to be used in production as it does not persist any state.

运行不带 -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 具有相同卷的容器,您应该会在其中保留之前存储的数据。

关于docker - 跨容器运行持久保存 Dockerized Consul KV Store,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55419824/

相关文章:

consul - 为代理寻找 Consul 集群

Consul集群未启动

wordpress - 每个暴露的端口都将重定向到8080,如何将容器端口映射到其他端口而不是8080?

dns - 如何从主机访问Consul DNS接口(interface)?

Docker Compose 相对路径与 Docker 卷

linux - 无法从 linux 发行版 (wsl 2) 中挂载/var/run/docker.sock

Docker-compose 卷不保存 Keycloak 的容器状态

docker - 访问容器内的 Docker 套接字

docker - apache启动后运行drush命令

amazon-web-services - Docker Volume与AWS s3