我的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
请帮助我解决问题,我被卡住了。
谢谢。
答案 0 :(得分:0)
撰写文件中有很多不需要的设置,这是一个精简的版本,同样适用:
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。充其量,这不会满足您的需求。它会检查是否已创建并启动另一个容器,但不会检查其中的应用程序是否已准备好为流量提供服务,并且DB可能需要一些时间才能变得可用。最糟糕的情况是,如果尝试将其移入群集模式,则会收到不支持的错误。
与其依赖于docker,不如更新它的应用程序入口点以检查外部依赖关系,并等待一两分钟使它们变得可用,然后再失败。一个非常简单的示例工具是wait-for-it,它是作为bash shell脚本编写的。