显然,为各个不同的微服务指定其对应的友好hostname会极大地方便调试;为此,我们需要先创建一个自己的网络(不可以用默认网络哦!)
docker network create <网络名>
然后,为各个需要跑在这个网络里的C#项目修正lunchSettings.json
"Docker": {
"commandName": "Docker",
"dockerfileRunArguments": "--network <网络名> --hostname <你喜欢的hostname>",
"launchBrowser": false,//显然,大部分微服务不需要launchBrowser
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
"publishAllPorts": true
}
和appsettings.json
"spring": {
"application": {
"name": "一个微服务的名字"
}
},
"eureka": {
"client": {
"serviceUrl": "http://eureka:8761/eureka/",//注意这里eureka server的指代也使用了hostname
"shouldFetchRegistry": "true",
"shouldRegisterWithEureka": true,
"validateCertificates": false
},
"instance": {
"port": "80",
"ipAddress": "<你刚刚设定的hostname>",
"preferIpAddress": false
}
},
最后,记得把eureka server连上去,注意使用--alias eureka
docker network connect dsc magical_hopper --alias eureka
一些坑
preferIpAddress
在k8s下必须设为true:"instance": { "preferIpAddress": true }
DiscoveryHttpHandler
在注入HttpClientFactory时,调用CreateClient
时还需要记得传递名称作为参数