如何为 Docker Compose 配置 dns 条目

And*_*ter 7 docker spring-boot docker-compose

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

我设置了以下内容,这对于本地开发非常有用:

amq:
    image: rmohr/activemq:latest
    ports:
      - "61616:61616"
      - "8161:8161"
legacy-bridge:
    image:  myco/myservice
    links:
      - amq
Run Code Online (Sandbox Code Playgroud)

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

broker-url=tcp://amq:61616
Run Code Online (Sandbox Code Playgroud)

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

现在,我需要将其设置为暂存/生产,其中 ActiveMQ 实例在基础设施内的现有硬件上运行。我的想法是要么使用 spring 配置文件来处理不同的配置,在这种情况下,“broker-url=tcp://amq:61616”的应用程序配置条目将变得类似,broker-url=tcp://some.host.here:61616或者找到某种方法在我的生产中创建 dns 条目docker-compose.yml 会将amqdns 条目指向关联的暂存或生产队列。

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

谢谢!

hel*_*ert 11

使用extra_hosts旗帜

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

legacy-bridge:
  image:  myco/myservice
  extra_hosts:
    - "amq:1.2.3.4"
Run Code Online (Sandbox Code Playgroud)

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

使用大使容器

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

amq-ambassador:
  image: svendowideit/ambassador
  command: ["your-amq-dns-name", "61616"]
  ports:
    - 61616
legacy-bridge:
  image:  myco/myservice
  links:
    - "amq-ambassador:amq"
Run Code Online (Sandbox Code Playgroud)