docker 端口映射的宿主机端口被内部感知,是怎么回事?

docker run --name test --rm -p 20082:80 test

我用这个启动一个容器
是一个apahce服务
结果我发现apache是知道我用的20082端口的
只要404时候
会有提示

Not Found
=========

The requested URL was not found on this server.

* * *

Apache/2.4.38 (Debian) Server at wx.iguojin.com Port 20082

但是他的80端口也是正常工作的
这是怎么回事

阅读 3k
2 个回答

因为端口号port也是host的一部分,当你输入网址 http://wx.iguojin.com:20082 访问服务器的时候,wx.iguojin.com:20082会作为Host整个被发送给http server,apache当然就可以解析到你的实际访问端口了。

你用浏览器的调试窗口,看看这个访问请求的Request Header部分的Host字段就知道了。

宿主机与 Docker 之间的关系你可以理解成一个反向代理,只要 Docker 内部的程序能正确处理 X-Forwarded-Port 请求标头即可。

除此之外还有 X-Forwarded-HostX-Forwarded-ProtoX-Forwarded-For 等几个标头,具体含义你谷歌一下吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题