如何在具有初始键值对数据的Docker上运行Consul?

K. *_*ddy 5 docker consul docker-compose

我正在尝试在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"
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以预填充键值对?

Mat*_*att 2

撰写

Compose 没有内置概念中的“任务”,但您可以在项目中使用多个撰写文件来设置它们。Adocker-compose-init.yml可以定义任务,而不是长时间运行的服务,但您需要自己管理编排。我在我的 consul demo 上举了一个例子

docker-compose up -d
docker-compose -f docker-compose-init.yml run consul_init
Run Code Online (Sandbox Code Playgroud)

形象构建

您可以添加图像构建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;
Run Code Online (Sandbox Code Playgroud)

图像启动

某些数据库向映像添加脚本以在启动时填充数据。这通常是为了让用户可以通过运行时注入的环境变量来控制设置,例如mysql / postgres / mongo

FROM progrium/consul:latest
ENTRYPOINT my-entrypoint.sh
Run Code Online (Sandbox Code Playgroud)

然后您的脚本启动服务器,设置数据,然后最后继续像之前的图像一样。