Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 在启动时尝试向脚本添加键/值对之前,我如何告诉脚本等待Consor选择一个领导者?_Docker_Consul_Consul Template - Fatal编程技术网

Docker 在启动时尝试向脚本添加键/值对之前,我如何告诉脚本等待Consor选择一个领导者?

Docker 在启动时尝试向脚本添加键/值对之前,我如何告诉脚本等待Consor选择一个领导者?,docker,consul,consul-template,Docker,Consul,Consul Template,我的开发环境由一个容器中的本地concur服务器和另一个容器中的应用程序(运行concur模板)组成,所有这些都与docker compose链接。我希望一切都能无缝地运转起来,并且在开发过程中不需要手动干预(安全性不是问题),因此我希望在启动时通过安装一个特定的文件,通过编程将默认的键/值对添加到concur 我一直遇到这个问题,每当我尝试在启动时使用API向Concur添加k/v对时,它都会失败,并出现一个错误2016/06/03 21:10:15[ERR]http:Request PUT/

我的开发环境由一个容器中的本地concur服务器和另一个容器中的应用程序(运行concur模板)组成,所有这些都与docker compose链接。我希望一切都能无缝地运转起来,并且在开发过程中不需要手动干预(安全性不是问题),因此我希望在启动时通过安装一个特定的文件,通过编程将默认的键/值对添加到concur

我一直遇到这个问题,每当我尝试在启动时使用API向Concur添加k/v对时,它都会失败,并出现一个错误
2016/06/03 21:10:15[ERR]http:Request PUT/v1/kv/app/secret\u key,错误:No cluster leader from=[::1]:58888
。如果我在手前加上一个睡眠命令,给执政官足够的时间来选举一位领导人,它就会起作用。但是,必须有更好的同步方式,对吗?尤其是当集群中只有一个节点时

这就是我目前所拥有的

Dockerfile

FROM voxxit/consul

ARG REFRESHED_AT="2016-06-01"
ARG DOCKERIZE_VERSION="v0.2.0"
ENV CONSUL_ADDR="http://localhost:8500"

ADD "https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-linux-amd64-${DOCKERIZE_VERSION}.tar.gz" /tmp
RUN set -x && \
    apk add --update curl jq && \
    cd /tmp && \
    tar -C /usr/local/bin -xzvf dockerize-linux-amd64-${DOCKERIZE_VERSION}.tar.gz && \
    rm -rf /var/cache/apk/* /tmp/*

RUN mkdir -p /etc/consul.d/data
COPY ./consul.json /etc/consul.d/
COPY ./entrypoint.sh /
RUN chmod +x /entrypoint.sh

WORKDIR /etc/consul.d/data
VOLUME ["/etc/consul.d/data"]

ENTRYPOINT ["/entrypoint.sh"]
CMD ["dockerize", "-stdout", "/var/log/consul.out", "-stderr", "/var/log/consul.err"]
entrypoint.sh

#!/bin/bash -e

# Start consul server and wait for it
nohup consul agent -config-file=/etc/consul.d \
    >/var/log/consul.out 2>/var/log/consul.err &
dockerize -wait "${CONSUL_ADDR}" # <-- Not working as I'd hoped

DEFAULT_CONFIG="/etc/consul.d/data/default.json"

if [ -f $DEFAULT_CONFIG ]; then
    # Bulk upload default k/v pairs
    while IFS=" " read -r key value; do
        prefix="${APP_NAME}"
        result=$(curl -s -X PUT -d "$value" "${CONSUL_ADDR}/v1/kv/${prefix}/${key}")
        if [ "$result" != "true" ]; then
            echo "ERROR loading $value into $key for $prefix"
            exit 1
        fi
    done < <(jq -r 'to_entries|map("\(.key) \(.value|tostring)")|.[]' $DEFAULT_CONFIG)
fi

echo "init complete - ready for start up"
exec "$@"

必须有某种方法可以暂停批量上传,直到我确定Concur已启动并运行。

我遇到了类似的问题,我通过指定预期的Concur节点数(使用命令行参数
-Bootstrap expect=5
)解决了我的问题(
引导无法提供预期的服务器计数)而不是简单地在单个节点上执行
-Bootstrap

我遇到了一个类似的问题,我通过指定预期的concer节点数(使用命令行参数
-Bootstrap expect=5
)解决了我的问题(
引导无法提供预期的服务器计数)而不是在一个节点上简单地
-boostrap

你能分享你的领事docker吗?你没有设置-bootstrap expect=1吗?我没有尝试过。我的印象是,
bootstrap expect
用于集群>1。@Shibashis我刚刚尝试将
“bootstrap\u expect”:1
添加到上述配置中,我得到了这个错误
=>bootstrap无法提供预期的服务器计数
是。你们在别处有docker Consor服务器吗?或者,您希望在本地设置中运行一个Consor实例?后者。这是我正在进行的开发设置。你能分享你的领事docker吗?你没有设置-bootstrap expect=1吗?我没有尝试过。我的印象是,
bootstrap expect
用于集群>1。@Shibashis我刚刚尝试将
“bootstrap\u expect”:1
添加到上述配置中,我得到了这个错误
=>bootstrap无法提供预期的服务器计数
是。你们在别处有docker Consor服务器吗?或者,您希望在本地设置中运行一个Consor实例?后者。这是我正在进行的一个开发设置。我不知道节点的数量与等待主节点的当选有什么关系?我不知道节点的数量与等待主节点的当选有什么关系?
{
"bootstrap": true,
"client_addr": "0.0.0.0",
"data_dir": "/data",
"enable_syslog": false,
"log_level": "INFO",
"server": true,
"ui_dir": "/ui",
"http_api_response_headers": {
    "Access-Control-Allow-Origin": "*"
}
}