我有一个名为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名称中删除下划线会被认为离步骤太远了。
答案 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
,放在别名包中。