就我的Docker服务的设置方式而言,我遇到了问题。实际上,我有五个服务:api(一个Django Rest Framework应用程序),db(一个PostgreSQL数据库),elasticsearch(一个Elasticsearch服务),Kibana和APM进行记录。
有效地,我需要在apm服务开始执行之前先启动Elasticsearch-但是顺序如此,以至于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
有效地,运行顺序导致APM服务上的通用Linux chroot退出代码为“ 1”,并且需要手动进行“ docker-compose apm restart”操作。
是否有一种方法可以等待一项服务完全“启用”,然后再“启用”另一项?
答案 0 :(得分:0)
如docker-compose文档中所述: https://docs.docker.com/compose/startup-order/
docker或compose无法在开始依赖之前由容器或容器组成,这些容器应由每个应用程序处理。
尽管在文档中显示了一种变通方法,但使用等待脚本:https://github.com/vishnubob/wait-for-it
答案 1 :(得分:0)
这里有一个github线程:
https://github.com/moby/moby/issues/30404#issuecomment-274825244
在这里
https://github.com/docker/compose/issues/4305
如果要对docker-compose使用运行状况检查,建议您使用v2.1,因为这是唯一支持它的版本。但是,如上述答案所述,此功能已删除,以方便从外部docker-compose移走:
https://github.com/docker/compose/issues/4305#issuecomment-276527457