我有一个web前端和web应用程序,两者都有码头支持,这里是对接撰写文件。
version: '3.4'
services:
webfrontend:
image: ${DOCKER_REGISTRY-}webfrontend
build:
context: .
dockerfile: WebFrontEnd/Dockerfile
mywebapi:
image: ${DOCKER_REGISTRY-}mywebapi
build:
context: .
dockerfile: MyWebAPI/Dockerfile由于两个应用程序共享相同的网络,所以内部DNS解析,我可以从前端应用程序访问web,如下所示,
using (var client = new System.Net.Http.HttpClient())
{
// Call *mywebapi*, and display its response in the page
var request = new System.Net.Http.HttpRequestMessage();
request.RequestUri = new Uri("http://mywebapi/WeatherForecast");
var response = await client.SendAsync(request);
}在这里,web http://mywebapi/WeatherForecast只能在代码中访问前端应用程序(内部),但是当我试图通过浏览器或邮递员浏览这个url时,它失败了。
http://mywebapi/WeatherForecast吗?发布于 2020-08-06 07:28:21
这是什么原因?(不是集装箱网络中的浏览器还是邮递员?)
是的,DNS解析仅用于内部网络,因此mywebapi在由docker-组合定义的网络之外是未定义的。
我们怎样才能在容器之外访问它?我是否需要使用IP和端口,或者DNS也可以使用?
您必须将主机的端口与容器公开的端口(应用程序正在监听的端口)进行映射。在船坞里有一个章节--写得像
...
ports:
- "8000:8000" # maps 8000 port of host to 8000 port inside container
...
...一旦完成端口映射,您就可以通过use http://localhost:<port>/从外部码头网络访问服务。
我可以在外面访问同一个http://mywebapi/WeatherForecast吗?
否,是的,您可以在mywebapi文件( *NIX )中定义一个将localhost解析为/etc/hosts的映射。仅限)
https://stackoverflow.com/questions/63277258
复制相似问题