dcoker-compose 启动顺序的问题

归云
归云
发布于 2021-11-17 / 2508 阅读
0
0

dcoker-compose 启动顺序的问题

dcoker-compose 是用于定义和运行多容器 Docker 应用程序的工具,通过dcoker-compose 可以来运行多容器应用程序
但运行多容器时,就牵扯到运行顺序的问题。比如我运行一个微服务,需要首先运行注册中心,然后才需要运行其他的微服务项目

docker-compose 虽然有depends_on 这个参数解决容器的依赖、启动先后的问题

但是这个参数却不会等容器完全运行成功,在运行其他应用

这样就会导致 注册中心还没完全运行成功,其他服务已经启动,从而导致找不到注册中心而崩溃的问题

这里可以使用 docker-compose-wait 解决这个问题

docker-compose-wait是一个命令行实用程序,用于在使用 docker-compose 时等待其他 容器启动

  • 固定的秒数后启动
  • 直到目标图像上的 TCP 端口打开后启动
  • 直到本地文件系统上存在文件或目录后启动

用法

修改应用的Dockerfile

FROM ibmjava:jre
MAINTAINER i@guiyunweb.com

# 添加docker-compose-wait工具
ADD https://github.guiyun.plus/ufoscout/docker-compose-wait/releases/download/2.9.0/wait /wait
RUN chmod +x /wait

# 运行
ARG JAR_FILE=build/libs/app-gateway.jar
RUN mkdir /opt/shareclasses
RUN mkdir /opt/app
COPY ${JAR_FILE} /opt/app/japp.jar
# 需要在运行命令并行运行/wait
CMD /wait &&  java -Xshareclasses:cacheDir=/opt/shareclasses -jar /opt/app/japp.jar

然后我们修改docker-compose.yml

version: '3'
services:
  app-nacos:
    image: nacos/nacos-server:2.0.3
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
      - "9848:9848"
    container_name: app-nacos
    hostname: app-nacos

  app-gateway:
    build:
      context: ./app-gateway
    ports:
      - "8000:8000"
    container_name: app-gateway
    hostname: app-gateway
    image: app-gateway
    environment:
      WAIT_HOSTS: app-nacos:8848

docker-compose.yml 添加WAIT_HOSTS 参数

只有当 WAIT_HOSTS 参数中的所有对 host:port 都可用时,项目才会启动

示例项目

https://github.com/Guiyunweb/app-cloud-dubbo

其他的用法可以看这个地方

https://github.guiyun.plus/ufoscout/docker-compose-wait


评论