为什么 java 应用程序在 Docker 容器中启动而不是在暴露的端口上?

Why does java app started in Docker container available not on exposed port?

我从 Spring Cloud 在 docker 容器中启动了 Eureka。这是我用于构建和公开 Eureka 的 Docker 文件:

FROM maven:3.5-jdk-8 AS build
COPY src /home/eureka/src
COPY pom.xml /home/eureka
RUN mvn -f /home/eureka/pom.xml clean package

FROM openjdk:8-jdk-alpine
COPY --from=build /home/eureka/target/service-registry-1.0-SNAPSHOT.jar /usr/app/service-registry-1.0-SNAPSHOT.jar

ENTRYPOINT ["java","-jar","/usr/app/service-registry-1.0-SNAPSHOT.jar"]  

EXPOSE 8761

这是我的 docker 撰写文件:

version: '2.1'

services: 

  eureka-service-registry-app: 
    build: eureka-service-registry-app
    ports:
      - "8761-8761"

基础架构中将有更多应用,但现在它们已被评论。

我开始 docker-compose up,过程看起来不错,但是当我想通过 localhost:8761 检查 Eureka web 仪表板时,此主机不可用。嗯,好的。在我的容器列表中,我看到以下内容:

0.0.0.0:32772->8761/tcp

和 localhost:32772 可用,尤里卡还活着。此外,如果我再次启动 docker-compose up,这个端口将增加,Eureka 可用的新端口将是 32773。因此我看到了一些模式,但我不明白如何使这个端口稳定和正常因为 Eureka 在 8761

上没有 Docker 启动

您定义一个端口范围

ports:
  - "8761-8761"

请改为

ports:
  - "8761:8761"

正如其他人已经指出的那样:docker-compose.yml 中公开的端口应更改为 -"8761:8761".

不过我看到了更多的观点。

Eureka 的默认端口是(据我所知)1111。 您是否公开了正确的端口?

此外,将 eureka 与 docker 结合使用时要小心。 他们可能会在 localhost 或他们的内部 IP 地址上注册自己 Docker 个容器,可能无法从其他 docker 个容器中获得。

考虑查看以下应用程序属性(或环境变量):

eureka.instance.prefer-ip-address=false
eureka.instance.ip-address=$HOST_IP_ADDRESS
eureka.instance.hostname=localhost