Spring云示例Eureka-Docker-在链接中使用下划线

Spring云示例Eureka-Docker-在链接中使用下划线,docker,spring-boot,spring-cloud,netflix-eureka,Docker,Spring Boot,Spring Cloud,Netflix Eureka,我可能在使用SpringCloud、Eureka和Docker时遇到了一个有趣的异常。我不确定我是否发现了一个问题,或者这种行为是否符合预期,但这里是要点 我首先从运行在命名docker容器中的eureka开始。接下来,我启动一个启用ClientDiscoveryEnabled的docker客户端。docker客户端容器正在使用docker“link”参数来获得主机名进入eureka容器的可访问性。yaml文件有一个用于连接到Eureka的条目,该条目由属性驱动: defaultZone: ht

我可能在使用SpringCloud、Eureka和Docker时遇到了一个有趣的异常。我不确定我是否发现了一个问题,或者这种行为是否符合预期,但这里是要点

我首先从运行在命名docker容器中的eureka开始。接下来,我启动一个启用ClientDiscoveryEnabled的docker客户端。docker客户端容器正在使用docker“link”参数来获得主机名进入eureka容器的可访问性。yaml文件有一个用于连接到Eureka的条目,该条目由属性驱动:

defaultZone: http://user:${eureka.password}@${host.name}:8761/eureka/
一切都很好,除非我尝试在容器名称中使用下划线。如果使用下划线命名容器,则客户端容器无法使用Eureka注册完全解析此名称。如果我删除下划线,一切正常。也许我错过了一些东西,这是意料之中的,但我没有看到任何人提到这个“功能”

我的客户来自Spring Cloud Samples Faign eureka项目。下面是一个场景

这将起作用,客户将注册:

sudo docker run -d -p=8761:8761 --name foobar chrisccoy/microsvcdemoeureka
sudo docker run -d -p=7311:7311 --name democlnt --link foobar:foobar chrisccoy/microsvcdemoclnt java -jar /opt/tst/ms_clnt.jar --host.name=foobar
sudo docker run -d -p=8761:8761 --name foo_bar chrisccoy/microsvcdemoeureka
sudo docker run -d -p=7311:7311 --name democlnt --link foo_bar:foo_bar chrisccoy/microsvcdemoclnt java -jar /opt/tst/ms_clnt.jar --host.name=foo_bar 
以下操作将不起作用!Eureka将启动,客户端将启动,但无法注册:

sudo docker run -d -p=8761:8761 --name foobar chrisccoy/microsvcdemoeureka
sudo docker run -d -p=7311:7311 --name democlnt --link foobar:foobar chrisccoy/microsvcdemoclnt java -jar /opt/tst/ms_clnt.jar --host.name=foobar
sudo docker run -d -p=8761:8761 --name foo_bar chrisccoy/microsvcdemoeureka
sudo docker run -d -p=7311:7311 --name democlnt --link foo_bar:foo_bar chrisccoy/microsvcdemoclnt java -jar /opt/tst/ms_clnt.jar --host.name=foo_bar 
以下是日志条目和后续异常:

2015-02-25 18:51:27.762 ERROR 1 --- [pool-4-thread-1] com.netflix.discovery.DiscoveryClient    : Can't get a response from http://user:password@foo_bar:8761/eureka/apps/HELLOCLIENT/172.17.0.11:HelloClient:7311
Can't contact any eureka nodes - possibly a security group issue?

com.sun.jersey.api.client.ClientHandlerException: java.lang.IllegalArgumentException: Host name may not be null
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:184)
at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:120)
at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:28)
at com.sun.jersey.api.client.Client.handle(Client.java:648)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:680)
at com.sun.jersey.api.client.WebResource.put(WebResource.java:211)
at com.netflix.discovery.DiscoveryClient.makeRemoteCall(DiscoveryClient.java:1097)
at com.netflix.discovery.DiscoveryClient.makeRemoteCall(DiscoveryClient.java:1060)
at com.netflix.discovery.DiscoveryClient.access$500(DiscoveryClient.java:105)
at com.netflix.discovery.DiscoveryClient$HeartbeatThread.run(DiscoveryClient.java:1583)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: Host name may not be null
at org.apache.http.util.Args.notBlank(Args.java:65)
at org.apache.http.HttpHost.<init>(HttpHost.java:81)
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.getHost(ApacheHttpClient4Handler.java:190)
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:170)
... 14 common frames omitted
我不确定这种脱节是从哪里来的。或者这是我不知道的一个特征


有什么想法吗?

看起来像
java.net.URI
不理解域名中的下划线。请参阅此要点:此

无法从http://user:password@foo_bar:8761/eureka/apps
我认为下划线在域中无效。我不知道为什么它不起作用。发布后,我环顾四周,注意到了这个…[链接]谢谢你的快速回复。今天学到了一些东西,这些东西夺走了你4个小时的生命。万分感谢,斯宾塞!事实上更为复杂:DNS名称中的下划线可以,主机名中通常没有下划线。这些小东西带来了如此多的快乐。