如何配置docker-compose服务在dockerd dns中将具有的名称(以删除下划线)?

时间:2018-11-24 01:05:36

标签: docker dns docker-compose

我有一个名为my_service的服务,可以由共享网络上的其他容器使用与服务定义相同的名称来解析:my_service。我不喜欢主机名或域名的下划线,因为它们未被广泛接受/支持。

我想更改dockerd dns中的名称,以便可以通过“ my-service”访问它,希望不更改撰写文件中的服务名称。

version: "2"
services:
  my_service:
    image: foo
    hostname: my-service
  networks:
    - "default"
    - "othernet"
...
networks:
  othernet:
    driver: bridge

我尝试了撰写设置hostname: my-service,该设置被添加到容器的Config.Hostname键中。但是该键不会被其他容器用于名称解析。

此外,这是一个附带问题,但是由于各种不同的原因(为了满足linux网络网桥名称,容器名称,网络名称,卷名称等),始终以一致的方式处理名称为什么从dns名称中删除下划线会被认为离步骤太远了。

1 个答案:

答案 0 :(得分:0)

Network aliases是一种实现方法。对于要在其上更改容器名称的每个网络,您将为其提供一个备用名称列表。

因此,您的服务定义将变为:

services:
  my_service:
    image: foo
    hostname: my-service
    ...
    networks:
      default:
        aliases:
           - my-service
           - my-srv
      othernet:
        aliases:
           - my-service

# the global `networks` section at the bottom doesn't need to be touched.
...

注意1::您不必在容器所在的每个网络上添加别名。如果不需要任何其他名称,请忽略该部分的别名键。

注意2::别名部分将添加新名称,但不会删除任何现有的默认映射。因此,在您添加更多my_service之后,在aliases下仍可以访问该容器。

如果您执行docker inspect <containerid>,则可以在每个网络上看到该容器的其他别名。默认情况下,dockerd将以容器ID的短形式抛出,例如afe2314,放在别名包中。