У меня проблема с заказом моих сервисов Docker с точки зрения их настройки. Фактически у меня есть пять служб: api (приложение Django Rest Framework), db (база данных PostgreSQL) ,asticsearch (служба Elasticsearch), Kibana и APM для ведения журнала.
По сути, мне нужно, чтобы Elasticsearch был запущен до того, как служба apm сможет начать делать свое дело, но порядок таков, что Elasticsearch нужно завершить до того, как APM и Kibana смогут начать делать то же самое.
Вот мой docker-compose.yml
файл и все соответствующие зависимости:
version: "3"
services:
api:
build:
context: api
command: python3 manage.py runserver 0.0.0.0:8000
env_file: api/.env
volumes:
- ./api:/usr/src/app
ports:
- 8000:8000
- 6900:6900
depends_on:
- db
db:
build: docker/db
environment:
- POSTGRES_DB=************
- POSTGRES_USER=dbaccount
- POSTGRES_PASSWORD=dbpassword
ports:
- 5432:5432
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
ports:
- 9200:9200
- 9300:9300
environment:
- discovery.type=single-node
- cluster.routing.allocation.disk.threshold_enabled=false
kibana:
image: docker.elastic.co/kibana/kibana:6.5.1
ports:
- 5601:5601
depends_on:
- elasticsearch
apm:
image: docker.elastic.co/apm/apm-server:6.5.1
volumes:
- ./docker/apm/apm-server.yml:/usr/share/apm-server/apm-server.yml
depends_on:
- elasticsearch
ports:
- 8200:8200
Фактически, порядок выполнения вызывает общий код завершения chroot для Linux «1» в службе APM и требует ручного «docker-compose apm restart» для начала работы ...
Есть ли способ подождать, пока один сервис полностью "включится", прежде чем "поднять" другой?