Сохранение настроенного хранилища Consul KV для всех запусков контейнеров

#docker #consul #docker-volume

#docker #consul #docker-volume

Вопрос:

В Mac OS запущен Docker Desktop. Я пытаюсь заставить официальный образ Consul Docker сохранять свое хранилище 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 сохранялось в нескольких
запуск контейнера?

Комментарии:

1. Из hub.docker.com/_/consul : «Запуск контейнера Consul без аргументов предоставит вам сервер Consul в режиме разработки».

2. Да, @DavidMaze, мне действительно нужен сервер Consul (не клиент). Однако любопытно узнать о вашем комментарии к режиму разработки… запрашивает ли режим разработки у Consul не сохранение данных KV? И если да, есть идеи, какие аргументы мне нужно предоставить, чтобы заставить его это сделать?

3. На странице с изображением, на которую я ссылался выше, содержится масса информации.

4. Еще раз спасибо @DavidMaze ( 1 снова), не могли бы вы просто подтвердить, что я хочу запустить контейнер без Consul в режиме сервера ? Опять же, просто ищу единственный запущенный экземпляр сервера Consul, а не кластер серверов / кворум и т.д. Глупо просто.

Ответ №1:

Запуск агента 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 , у вас должны быть ваши ранее сохраненные данные там.

Комментарии:

1. Спасибо @bagljas ( 1) однако ваша docker run... команда у меня не работает. Когда я запускаю его, контейнер запускается, но когда я захожу в https://localhost:8500 свой браузер, ничего не появляется.

2. @hotmeatballsoup если вам нужен графический пользовательский интерфейс для Consul, вам нужно будет передать -ui аргумент команде агента 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 -ui Если ранее вы могли получить доступ к пользовательскому интерфейсу из своего браузера, то это также должно сработать. Я знаю, что Docker может потребоваться некоторая дополнительная настройка для предоставления портов контейнера на localhost хост-компьютере. Но я сам не использую Mac OS.