当前位置: 首页 > 知识库问答 >
问题:

Spring启动-Docker编写-服务就绪

秦炜
2023-03-14

我有一个docker撰写与3服务:配置服务器,cpo事件和cpo执行者。我希望只有当配置服务器准备就绪时才启动服务,因为服务需要配置服务器服务中的配置文件。

docker-compose.yml

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

依赖于、链接、healthcheck,没有任何东西可以保证这两个服务(cpo executor、cpo event)仅在配置服务器就绪后启动。

共有1个答案

颜高格
2023-03-14

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

#!/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 $*"

您可以在这里查看完整的示例用法。docker compose 3.7版解决了相同的问题,但针对不同的用例

 类似资料:
  • 问题内容: 码头工人给我一个困难时期。我按照以下说明进行操作,以便在运行由strato.de托管的Ubuntu 14.04的虚拟服务器上安装docker。 执行此行直接将我带入此错误消息: 安装完成后,我安装了上述两个软件包。现在我的问题是我无法让docker运行。 结果是: 结果是 和 结果是 有人对缺少哪些依赖项有任何线索吗?还有什么可能出问题了?码头工人是否提供任何日志? 我正在来回寻找解决

  • 本文向大家介绍Docker使用编写dockerfile启动node.js应用,包括了Docker使用编写dockerfile启动node.js应用的使用技巧和注意事项,需要的朋友参考一下 编写 Dockerfile 以 express 自动创建的目录为例,目录结构如下: 在项目目录下新建 Dockerfile 文件 FROM 指定基础镜像为 node 的 10.15 版本(node 官方版本可在此

  • 我一直试图在我的docker容器中运行cron作业,但当容器启动时,我似乎无法让cron服务运行。我可以远程进入运行容器并运行“cron”以使服务在没有问题的情况下启动。我在我的DockerFile中包含了这个,为什么命令没有被执行呢? Docker-compose.yml

  • 我正在尝试在我的容器中启动一些服务。 这是我entry_point剧本: 我想做的是取消评论这一行: 但在启动时,容器就挂在这里。 有什么解决办法吗?

  • 我正在使用Spring Boot注册服务器(Eureka服务器)。目前它正在使用以下配置。 项目名称:注册服务 内部主要方式:系统。setProperty(“spring.config.name”、“注册服务”); "yml file": 文件名:注册-服务内容: 通过以上配置,应用程序开始在2323上运行。但如果我换了Spring。配置。名称,它不工作,开始给连接拒绝异常。 > 为什么会这样?即

  • 在我的文件中,我有很多服务: nginx mysql 雷迪斯 回声 php ... 但也有一些我与docker compose一起使用的CLI实用程序运行--rm: 工匠 作曲家 npm 当我启动我的系统时,我会编写。不幸的是,这也会尝试启动所有CLI实用程序。有没有办法在我的docker compose中分离这两个类别?