Получить консул Docker образ, чтобы быть постоянным с данными Vault - PullRequest
0 голосов
/ 27 сентября 2018

Я использую образ Vault Docker с образом Consul Docker в качестве хранилища.Моя проблема в том, что если якобы контейнер Консул выйдет из строя, и я попытаюсь запустить новый контейнер, мне нужно будет заново запустить хранилище, и данные, которые были сохранены Консулом, будут потеряны.

Кто-нибудь знает, что мне нужно сделать, чтобы данные были постоянными?

Команда для запуска образа Консула:

docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp -it consul

Команда для запуска образа хранилища:

docker run -d -p 8200:8200 -v /root/vault:/vault --cap-add=IPC_LOCK vault server

И содержимое файла конфигурации хранилища:

{
            "listener": [{
                    "tcp": {
                            "address": "0.0.0.0:8200",
                            "tls_disable" : 1
                    }
            }],

            "storage" :{
                    "consul" : {
              "address" :"172.17.0.4:8500"
              "path"    :"vault/"

                    }
            }
            "max_lease_ttl": "10h",
            "default_lease_ttl": "10h",
            "ui": true,
}

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

В соответствии с описанием докера консула , VOLUME /consul/data никак не используется в режиме разработки, что по умолчанию для агента консула.

Для запуска песочницы 1 консулаАгент, работающий в режиме сервера + 1 сервер хранилища (что не рекомендуется ), вы можете:

  • Использовать постоянный том для консула и смонтировать его на контейнере:

    docker volume create consul --label description='Persistent data for consul'
    
  • Запустить контейнер консула:

    docker run -d \
    -p 8400:8400 -p 8500:8500 -p 8600:53/udp \
    --net host \
    --mount type=volume,source=consul,target=/consul/data \
    --name consul \
    -it consul agent -server -bind=127.0.0.1 -bootstrap-expect=1
    
  • Сконфигурировать адрес хранилища консула для конфигурации сервера хранилища в соответствии с адресом привязки (127.0.0.1 для этого примера):

        "storage" :{
                "consul" : {
          "address" :"127.0.0.1:8500"
    
  • Запустите образ хранилища:

    docker run -d \
    -p 8200:8200 \
    -v /root/vault:/vault \
    --cap-add=IPC_LOCK \
    --net host \
    --name vault \
    vault server
    

Затем убедитесь, что консул правильно монтируеттом:

$ docker inspect --format '{{ .Mounts }}' consul

В хранилище консул настроен как хранилище:

$ docker logs vault 2>&1 | grep Storage                                                                    
             Storage: consul (HA available)

Затем запустите / откройте хранилище как обычно.

0 голосов
/ 08 октября 2018

В конце концов я сделал следующее:

Создание постоянного тома для консула и монтирование его в контейнер:

docker volume create consul-volume --label description='Persistent data for consul'

Создание файла конфигурации local.json для консула:

{
    "log_level": "DEBUG",
    "server": true,
    "ui": true,
    "bootstrap": true,
    "client_addr":"0.0.0.0"
}

Запуск контейнера консула:

docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp --net mynet -v /root/vault/consul:/consul --mount type=volume,source=consul-volume,target=/consul/data --name consul -it consul agent

Запуск контейнера хранилища:

docker run -d -p 8200:8200 -v /root/vault:/vault --cap-add=IPC_LOCK vault server

И данные в контейнере консула являются постоянными.

0 голосов
/ 27 сентября 2018

Вам нужно , чтобы контейнер Consul сохранил свой каталог /consul/data .(Эта документация Hashicorp также рекомендует создавать резервные копии Consul, отдельно от этого.) Типичным способом является изменение вашей docker run команды

docker run -v ./consul:/consul/data ... consul

(возможно, изображение настроено для попытки выполнить это за вашей спиной,если вы запускаете один и тот же контейнер с теми же параметрами, но, вероятно, рекомендуется четко указать это, вдвойне, чтобы узнать, какие каталоги нужно сохранить.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...