Persisting Dockerized Consul KV Store в разных контейнерах - PullRequest
0 голосов
/ 29 марта 2019

Mac OS здесь работает с Docker Desktop. Я пытаюсь получить официальный Консул Докер , чтобы он сохранял свой магазин 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 для 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 сохранялось через несколько контейнер работает?

1 Ответ

1 голос
/ 29 марта 2019

Запущенный агент Consul (как в режиме сервера, так и в режиме клиента) в режиме разработки не сохраняет состояния. С Руководство по началу работы

Этот режим полезен для быстрого и простого запуска среды Consul с одним узлом. Он не предназначен для использования в производстве, поскольку не сохраняется ни в каком состоянии.

Запуск агента Consul без флага -server даст вам клиента, как вы можете видеть при запуске агента в выходных данных:

==> 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, у вас должны быть ранее сохраненные данные.

...