Docker启动RabbitMQ管理镜像访问报无login.ejs模板错误原因问询
报错根因分析
两个启动命令的核心差异是是否配置了Docker端口映射,报错逻辑完全可以通过端口映射规则解释:
- 你使用的第一条启动命令没有添加
-p端口映射参数:
Docker默认不会自动把容器端口暴露到宿主机网络,因此这条命令启动的RabbitMQ容器的15672、5672端口仅能通过容器自身的IP访问,无法通过docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3-managementlocalhost访问。你此时访问http://localhost:15672拿到的报错,实际上来自于你本地环境中之前已经存在的、占用了15672端口的异常RabbitMQ实例,该实例的管理插件静态资源损坏/缺失,才会抛出There is no template at js/tmpl/login.ejs的模板不存在错误,和你刚启动的新容器没有任何关系。 - 你使用的第二条启动命令显式配置了端口映射:
docker run -it --rm --name mymq -p 5672:5672 -p 15672:15672 rabbitmq:3-management-p 15672:15672参数会将宿主机15672端口的所有流量转发到新容器的15672端口,此时你访问localhost:15672的请求会直接打到刚启动的正常RabbitMQ容器上,自然可以正常加载管理界面资源。
验证逻辑参考:在执行第一条命令启动容器后,执行
docker inspect some-rabbit | grep IPAddress拿到容器专属IP,直接访问http://容器IP:15672,会发现界面可以正常打开,不存在模板报错问题。
内容的提问来源于stack exchange,提问作者Jakob Busk Sørensen
相关产品推荐
相关产品推荐

