基于GraalVM镜像的Docker容器运行Quarkus示例应用遇问题
问题分析与解决步骤
核心原因
你的问题主要出在Docker容器网络端口未映射,以及部分启动参数限制了服务的可访问范围。
步骤1:确保容器端口映射到宿主机
Windows宿主机与Docker容器属于独立的网络环境,若未将容器内的8118端口映射到宿主机,即使容器内服务正常启动,外部也无法访问。
- 先停止当前容器:
docker stop contenedor-graalvm-1 - 删除原容器(若需保留数据可先做备份):
docker rm contenedor-graalvm-1 - 重新创建带端口映射的容器:
这里docker run -d -p 8118:8118 --name contenedor-graalvm-1 container-registry.oracle.com/graalvm/community:ol8-java17-22.3.0-b1-p 8118:8118表示将宿主机的8118端口映射到容器内的8118端口。
步骤2:正确启动Quarkus原生镜像
在容器内启动服务时,必须绑定到0.0.0.0,这样服务会监听容器的所有网络接口,允许宿主机通过映射端口访问。
进入容器并启动服务:
docker exec -it contenedor-graalvm-1 bash cd code-with-quarkus-one/target ./code-with-quarkus-one-1.0.0-SNAPSHOT-runner -Dquarkus.http.host=0.0.0.0 -Dquarkus.http.port=8118
步骤3:验证服务可访问性
在Windows宿主机的浏览器或终端中访问:
http://localhost:8118/hello
额外排查点
确认容器内服务监听状态:在容器内执行以下命令,检查是否有进程监听8118端口:
netstat -tulpn | grep 8118正常输出应显示类似
0.0.0.0:8118的监听记录。检查Windows防火墙:暂时关闭Windows防火墙测试,若能访问则需添加8118端口的允许规则。
确认原生镜像构建正确性:确保你是在GraalVM容器内完成的原生镜像构建,执行构建命令时无报错:
./mvnw package -Pnative
内容的提问来源于stack exchange,提问作者JLLMNCHR
相关产品推荐
相关产品推荐

