#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.