主机名不适用于docker swarm模式

时间:2018-08-30 14:15:56

标签: docker docker-compose docker-swarm

我正在使用Docker版本18.06.1-ce,并撰写版本1.22.0。

根据docker,应该可以使用服务名称来调用服务。这对我来说适用于没有swarm模式的docker compose,但在swarm模式下它不起作用。我什至尝试在自己的撰写中设置别名,但没有结果。

下面是我的docker-compose.yml

Sheets("2nd sheet")

检查网络后,我发现

Sheets(1)

现在,如果我使用长名称“ test_config-service.1.se8ajr73ajnjhvxt3rq31xzlm”连接到容器终端并执行ping操作,则可以ping但不能执行“ config-service”。

3 个答案:

答案 0 :(得分:0)

尝试使用docker service ls命令列出您的服务。因为如果您使用stack并给您的堆栈命名,则服务名称将为nameofstack_config-service

我在您的检查中看到test_eureka-service.1xxxxxx,因此服务名称应为test_eureka-service

答案 1 :(得分:0)

答案 2 :(得分:0)

我认为您遇到的问题是因为您使用的是群集范围的网桥网络,而不是覆盖网络。我不确定是否支持此配置。以群集模式部署时,服务的DNS条目位于服务级别,而不是单个容器。根据我的测试,该DNS条目以及用于设置VIP的代码仅适用于覆盖网络。如果确实需要将网络配置为网桥,则可能需要解决此问题:https://github.com/moby/moby/issues/37672

否则,简单的解决方法是用覆盖网络替换您的网络。您可以删除网络别名,因为它们是多余的。并且,如果主机上还有其他容器也需要从群集模式外部进入此网络,请确保将覆盖网络配置为“可连接”。如果您当前有其他应用程序连接到网络,则可以将其替换为新的网络,或者如果需要保留相同的网络名称,请分两个阶段将其交换出去:

# create a temporary network to free up the new_network name
docker network create -d overlay --attachable temp_network
docker network connect temp_network $container_id # repeat for each container
# finish the above step for all containers before continuing
docker network disconnect new_network $container_id #repeat for each container
# remove the old bridge network
docker network rm new_network

# now create a new_network as overlay
docker network create -d overlay --attachable new_network
docker network connect new_network $container_id # repeat for each container
# finish the above step for all containers before continuing
docker network disconnect temp_network $container_id #repeat for each container
# cleanup the temporary network
docker network rm temp_network

如果一切都以群体模式运行,则不需要--attachable。之后,您应该可以启动群集模式堆栈。