首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring-boot - Docker Compose -服务就绪

Spring-boot - Docker Compose -服务就绪
EN

Stack Overflow用户
提问于 2021-02-10 21:22:03
回答 1查看 57关注 0票数 0

我有一个包含3个服务的docker-compose : config-server,cpo-events和cpo-executor。我希望服务仅在config-server就绪时启动,因为服务需要config-server服务中的配置文件。

docker-compose.yml:

代码语言:javascript
复制
version: '3.7'
services:
    config-server:
        container_name: cup-config-server
        image: cup-config-server:1.0.0
        expose:
            - 8888
        ports:
            - 8888:8888
        networks:
            - spring-cloud-network
        healthcheck:
            test: ["CMD", "curl", "-f", "http://localhost:8888/cpo-executor/dev"]
            interval: 30s
            timeout: 10s
            retries: 5
    cpo-events:
        container_name: cpo-events-kafka
        image: cpo-events-kafka:1.0.0
        expose:
            - 8878
        ports:
            - 8878:8878
        networks:
            - spring-cloud-network
        depends_on:
            - config-server
        links: 
            - config-server
    cpo-executor:
        container_name: cpo-executor
        image: cpo-executor:1.0.0
        expose:
            - 8879
        ports:
            - 8879:8879
        networks:
            - spring-cloud-network
        depends_on:
            - config-server
        links: 
            - config-server
networks:
    spring-cloud-network:
        driver: bridge

Depends_on、links、healthcheck、nothing都不能保证这两个服务(cpo-executor、cpo-event)仅在配置服务器就绪后才能启动。

EN

回答 1

Stack Overflow用户

发布于 2021-02-10 22:05:22

如果要在本地测试服务,则可以添加入口点脚本

代码语言:javascript
复制
#!/usr/bin/env bash

wait_single_host() {
  local host=$1
  shift
  local port=$1
  shift

  echo "==> Check host ${host}:${port}"
  while ! nc ${host} ${port} > /dev/null 2>&1 < /dev/null; do echo "   --> Waiting for ${host}:${port}" && sleep 1; done;
}

wait_all_hosts() {
  if [ ! -z "$WAIT_FOR_HOSTS" ]; then
    local separator=':'
    for _HOST in $WAIT_FOR_HOSTS ; do
        IFS="${separator}" read -ra _HOST_PARTS <<< "$_HOST"
        wait_single_host "${_HOST_PARTS[0]}" "${_HOST_PARTS[1]}"
    done
  else
    echo "IMPORTANT : Waiting for nothing because no $WAIT_FOR_HOSTS env var defined !!!"
  fi
}

wait_all_hosts
sleep 60

bash -c "/usr/local/bin/docker-entrypoint $*"

您可以查看完整的示例用法here。它解决了相同的问题,但使用docker-compose版本3.7解决了不同的用例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66137725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档