我的docker-composer.yml文件中有以下配置。
version: '3.3'
services:
service-1:
container_name: 'service-1'
build: './service-1'
depends_on:
- 'mongo'
- 'consul'
networks:
backend:
aliases:
- service-1
service-2:
build: './service-2'
ports:
- '8825:8825'
- '8835:8835'
networks:
frontend:
backend:
aliases:
- service-2
depends_on:
- 'mongo'
- 'consul'
consul:
image: 'consul:latest'
networks:
backend:
aliases:
- consul
mongo:
image: 'mongo:latest'
networks:
backend:
aliases:
- mongo
networks:
frontend:
backend:
internal: true当我的容器启动时,它们不能使用主机名相互通信。大多数容器使用mongo db容器,但它们甚至无法到达它,我得到了以下错误。
Error connecting to mongo : no reachable servers请帮我解决这个问题,我卡住了。
谢谢。
发布于 2018-07-24 22:16:18
您在compose文件中有许多不需要的设置,下面是一个同样有效的精简版本:
version: '3.3'
services:
service-1:
build: './service-1'
networks:
- backend
service-2:
build: './service-2'
ports:
- '8825:8825'
- '8835:8835'
networks:
- frontend
- backend
consul:
image: 'consul:latest'
networks:
- backend
mongo:
image: 'mongo:latest'
networks:
- backend
networks:
frontend:
backend:
internal: true您可以自动获取每个容器的服务名称的别名,无需重复。如果您为服务指定了容器名称,则还会失去扩展服务的能力。我还建议将构建步骤移出compose文件,并使用本地构建的应用程序的镜像名称。
现在,对于可能出现的问题,您的组合文件中有一个depends_on。充其量,这不会实现您想要的结果。它检查其他容器是否已创建并启动,但不检查其中的应用程序是否已准备好为流量提供服务,并且数据库可能需要时间才能变为可用。在最坏的情况下,你会得到一个错误,它是不支持的,如果你试图移动到群组模式。
与其依赖docker,不如更新你的应用程序入口点,检查外部依赖项,并等待一两分钟,让它们变得可用,然后再失败。一个非常简单的示例工具是wait-for-it,它被编写为bash shell脚本。
https://stackoverflow.com/questions/51499833
复制相似问题