Docker Compose Wait til依赖项容器在启动前已完全启动

时间:2019-04-03 18:45:26

标签: docker docker-compose

我正在使用docker-compose使用docker服务,并且我有一个依赖于花药的服务。

我使用了depends_on键,但是具有依赖项的服务在依赖服务完全启动之前启动。

version: '3'

services:
  KeyManager:
    image: cjrutherford/keymanager
    deploy:
      replicas: 1
    ports:
      - '3220:3220'
    networks:
      - privnet
  YellowDiamond:
    image: cjrutherford/server
    depends_on:
      - KeyManager
    deploy:
      replicas: 1
    ports:
      - '3000:3000'
    networks:
      - privnet
      - web
networks:
  privnet:
    internal: true
  web:

这两个都是节点应用程序,要求密钥管理器在服务器启动之前正在运行以接受请求。我可以添加超时吗?或在应用程序中发送触发器?从经理那里获取钥匙还为时过早。

2 个答案:

答案 0 :(得分:1)

我经常发现使用wait-for-it bash脚本比对docker-compose进行内置运行状况检查要有效得多。

这将针对给定的端口运行TCP运行状况检查,并等到此操作完成后再开始运行进程。

示例代码:

version: "2"
services:
  web:
    build: .
    ports:
      - "80:8000"
    depends_on:
      - "db"
    command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
  db:
    image: postgres

以下是一些文档:

答案 1 :(得分:0)

您可能正在寻找docker compose healthcheck

healthcheck:
  test: ["CMD-SHELL", "pg_isready -U postgres"]
  interval: 10s
  timeout: 5s
  retries: 5

这里也有很好的参考资料:
https://github.com/peter-evans/docker-compose-healthcheck