根据 领事的码头描述 , VOLUME /consul/data 在开发模式下不以任何方式使用,这是consul代理的默认模式。
VOLUME /consul/data
用于运行在服务器模式+ 1个Vault服务器中运行的1个consul代理的沙箱(即 不建议 ), 您可以:
使用持久卷作为consul并将其挂载到容器上:
docker volume create consul --label description='Persistent data for consul'
启动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
配置与绑定地址匹配的Vault的服务器配置的consul存储地址( 127.0.0.1 对于这个例子):
127.0.0.1
"storage" :{ "consul" : { "address" :"127.0.0.1:8500"
运行Vault映像:
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
Vault已将consul配置为存储:
$ docker logs vault 2>&1 | grep Storage Storage: consul (HA available)
然后像往常一样初始化/解封金库。
你需要 导致Consul容器持久化 /consul/data 目录 。 (Hashicorp文档还建议单独支持Consul。)一种典型的方法是改变你的 docker run 命令
/consul/data
docker run
docker run -v ./consul:/consul/data ... consul
(如果您使用相同的选项启动相同的容器,可能会将图像设置为在您的背后进行尝试,但是明确这一点可能是一种很好的做法,这样才能知道要备份哪些目录。)
最后我做了以下事情:
为consul创建持久卷并将其挂载到容器上:
docker volume create consul-volume --label description='Persistent data for consul'
为consul创建local.json配置文件:
{ "log_level": "DEBUG", "server": true, "ui": true, "bootstrap": true, "client_addr":"0.0.0.0" }
运行consul容器:
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
并且consul容器中的数据是持久的。