我试图在docker容器上旋转Consul服务器并将其用作我的
SpringBoot云应用程序的配置服务器.为此,我想在Consul中有一些预先配置的数据(键值对).
我在docker-compose.yml中的当前配置是:
consul:
image: "progrium/consul:latest"
container_name: "consul"
ports:
- '9330:8300'
- '9400:8400'
- '9500:8500'
- '9600:53'
command: "-server -bootstrap -ui-dir /ui"
有没有办法预先填充键值对?
最佳答案 撰写
Compose没有内置概念的“任务”,但您可以在项目中使用多个撰写文件进行设置. docker-compose-init.yml可以定义任务,而不是长时间运行的服务,但您需要自己管理编排.我放了一个example on my consul demo.
docker-compose up -d
docker-compose -f docker-compose-init.yml run consul_init
图像构建
您可以添加图像构建RUN步骤来添加数据.这里的复杂功能是以与往常相同的方式运行服务器,但在后台运行,并在一个RUN步骤中添加数据.
FROM progrium/consul:latest
RUN set -uex; \
consul agent -server --bootstrap -data-dir /consul/data & \
let "timeout = $(date +%s) + 15"; \
while ! curl -f -s http://localhost:8500/v1/status/leader | grep "[0-9]:[0-9]"; do\
if [ $(date +%s) -gt $timeout ]; then echo "timeout"; exit 1; fi; \
sleep 1; \
done; \
consul kv put somekey somevalue;
图像启动
某些数据库向映像添加脚本以在启动时填充数据.这通常是因为用户可以通过在运行时注入的环境变量来控制设置,例如mysql/postgres/mongo.
FROM progrium/consul:latest
ENTRYPOINT my-entrypoint.sh
然后你的脚本启动服务器,设置数据,然后在最后继续,就像之前的图像一样.