我的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容器,但它们甚至无法到达,我得到了以下错误。
Error connecting to mongo : no reachable servers请帮我解决这个问题,我被困住了。
谢谢。
发布于 2018-07-24 14:18:28
在撰写文件中有很多不必要的设置,下面是一个精简的版本,也可以:
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您将自动为每个容器获取服务名称的别名,不需要重复该别名。如果将服务命名为容器名,则还会失去扩展服务的能力。我还建议将构建步骤移出撰写文件,并为您在本地构建的应用程序使用图像名称。
现在,对于可能出现的问题,您的撰写文件中有一个depends_on。充其量,这做不到你想要的。所有这些都检查另一个容器是否已经创建和启动,但没有检查内部的应用程序是否已经准备好为通信服务,数据库可能需要时间才能变得可用。在最坏的情况下,你会得到一个错误,它是不支持的,如果你尝试移动到蜂群模式。
不要在这方面依赖于docker,而是更新应用程序入口点以检查外部依赖项,并等待一两分钟后,它们才能在失败前可用。这方面的一个非常简单的示例工具是等-它-它,它是作为bash脚本编写的。
https://devops.stackexchange.com/questions/4590
复制相似问题