如何为 Docker Compose 配置 dns 条目

Posted

技术标签:

【中文标题】如何为 Docker Compose 配置 dns 条目【英文标题】:How to configure dns entries for Docker Compose 【发布时间】:2017-06-29 18:42:38 【问题描述】:

我正在设置一个 Spring 应用程序以使用 compose 运行。应用程序需要建立与 ActiveMQ 的连接,或者为开发人员在本地运行,或者与现有实例建立连接以进行登台/生产。

我设置了以下对本地开发人员非常有用的设置:

amq:
    image: rmohr/activemq:latest
    ports:
      - "61616:61616"
      - "8161:8161"
legacy-bridge:
    image:  myco/myservice
    links:
      - amq

在应用程序配置中,我将 AMQ 连接声明为

broker-url=tcp://amq:61616

运行 docker-compose up 效果很好,activeMQ 在本地启动,我的应用程序 constiner 启动并连接到它。

现在我需要为 ActiveMQ 实例在基础架构内的现有硬件上运行的登台/生产进行设置。我的想法是要么使用 spring 配置文件来处理不同的配置,在这种情况下,'broker-url=tcp://amq:61616' 的应用程序配置条目将变为 broker-url=tcp://some.host.here:61616 之类的东西,或者找到某种方法来创建一个 dns 条目在我的生产 docker-compose.yml 中,它将一个 amq dns 条目指向相关的暂存或生产队列。

这里最好的方法是什么,如果是 DNS,我如何在 compose 中设置它?

谢谢!

【问题讨论】:

【参考方案1】:

使用extra_hosts 标志

首先想到的是使用Compose's extra_hosts 标志:

legacy-bridge:
  image:  myco/myservice
  extra_hosts:
    - "amq:1.2.3.4"

这不会创建 DNS 记录,而是在容器的 /etc/hosts 文件中创建一个条目,从而有效地允许您在应用程序中继续使用 tcp://amq:61616 作为代理 URL。

使用大使容器

如果您不满足于直接指定生产代理的 IP 地址并希望利用现有的 DNS 记录,您可以使用ambassador pattern:

amq-ambassador:
  image: svendowideit/ambassador
  command: ["your-amq-dns-name", "61616"]
  ports:
    - 61616
legacy-bridge:
  image:  myco/myservice
  links:
    - "amq-ambassador:amq"

【讨论】:

以上是关于如何为 Docker Compose 配置 dns 条目的主要内容,如果未能解决你的问题,请参考以下文章

如何为 MongoDB 和 Spring Boot 定义主机名到 docker-compose.yml

如何为开发环境配置 vhosts/apache 子域?

如何为 Elastic Beanstalk DOCKER 环境设置永久 DNS 名称?

如何为SUSE配置IP地址,网关和DNS

如何为SUSE配置IP地址,网关和DNS

Docker Compose 主机名 DNS 查找失败