首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在自定义网络中没有解析码头主机名。

在自定义网络中没有解析码头主机名。
EN

DevOps用户
提问于 2018-07-24 13:26:31
回答 1查看 867关注 0票数 -2

我的docker-composer.yml文件中有以下配置。

代码语言:javascript
复制
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容器,但它们甚至无法到达,我得到了以下错误。

代码语言:javascript
复制
Error connecting to mongo : no reachable servers

请帮我解决这个问题,我被困住了。

谢谢。

EN

回答 1

DevOps用户

发布于 2018-07-24 14:18:28

在撰写文件中有很多不必要的设置,下面是一个精简的版本,也可以:

代码语言:javascript
复制
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脚本编写的。

票数 1
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/4590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档