首页 > 解决方案 > 无法在 Dockerfile 中使用 EXPOSE 公开端口

问题描述

我正在尝试公开一个 JMX 端口以从 minikube 监视 SpringBoot 应用程序。所以我在 Dockerfile 中添加了 EXPOSE 9010 并在 deployment.yaml 中添加

- containerPort: 9010
- name: JAVA_OPTS  
              value: "-Dcom.sun.management.jmxremote=true \
                      -Dcom.sun.management.jmxremote.authenticate=false \
                      -Dcom.sun.management.jmxremote.ssl=false \
                      -Dcom.sun.management.jmxremote.local.only=false \
                      -Dcom.sun.management.jmxremote.port=9010 \
                      -Dcom.sun.management.jmxremote.rmi.port=9010 \
                      -Djava.rmi.server.hostname=127.0.0.1" 

但是,该端口并未暴露。我在这里错过了什么吗?
尝试端口转发时出现以下错误

Handling connection for 9010
E0223 11:48:52.999502   17966 portforward.go:400] an error occurred forwarding 9010 -> 9010: error forwarding port 9010 to pod 4dc803f4d28b82b98dbc0e8fc1448d760f98694e026fb74511b2b8957aa88ef3, uid : exit status 1: 2021/02/23 06:18:52 socat[16604] E connect(5, AF=2 127.0.0.1:9010, 16): Connection refused

Dockerfile:

FROM openjdk:11
WORKDIR /
ADD target/usgagg-service-0.0.1-SNAPSHOT.jar //
EXPOSE 9010
ENTRYPOINT ["java","-Dspring.profiles.active=local","-jar","usgagg-service-0.0.1-SNAPSHOT.jar"]

注意:Springboot server.port 是 8080,我试图创建任何服务来公开 8080 端口,我刚刚在 deployment.yaml 中添加了容器端口,它工作正常。我只有 9010 有问题

更新:通过将 Dockerfile 中的 ENTRYPOINT 修改为以下来解决问题。

ENTRYPOINT exec java $JAVA_OPTS -Dspring.profiles.active=local -jar /usgagg-service-0.0.1-SNAPSHOT.jar

标签: dockerminikubekubernetes-pod

解决方案


推荐阅读