本地无法访问Docker发布的端口,JBoss服务访问返回ERR_EMPTY_RESPONSE
问题根因
你配置的-Djboss.bind.address=0.0.0.0启动参数未生效,JBoss默认只监听容器内部的回环地址127.0.0.1,外部请求无法穿透到容器内的服务,所以返回ERR_EMPTY_RESPONSE错误。
参数失效的原因是Dockerfile中ENTRYPOINT的写法错误:exec数组格式的ENTRYPOINT要求命令和每个参数都作为独立的数组元素,你将命令和所有参数写在同一个字符串内,系统会将整段内容当做一个命令文件查找,最终参数没有传递给standalone.sh脚本。
修复方案
修改Dockerfile中的ENTRYPOINT配置,将命令和参数拆分到不同的数组项:
# 错误写法 # ENTRYPOINT [ "/opt/jboss/bin/standalone.sh -Djboss.bind.address=0.0.0.0 -Djboss.bind.address.management=0.0.0.0" ] # 正确写法 ENTRYPOINT [ "/opt/jboss/bin/standalone.sh", "-Djboss.bind.address=0.0.0.0", "-Djboss.bind.address.management=0.0.0.0" ]
修改后重新构建镜像启动容器,日志会显示JBoss监听地址变为0.0.0.0:8080,此时访问本地8080端口即可正常打开页面。
可选优化
你也可以直接修改JBoss的standalone/configuration/standalone.xml配置文件,将其中的interface绑定地址改为0.0.0.0,避免启动参数漏传的问题。
内容的提问来源于stack exchange,提问作者mles
相关产品推荐
相关产品推荐

