首页 > 解决方案 > 为什么 java 应用程序在 Docker 容器中启动而不在暴露的端口上可用?

问题描述

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

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

这是我的码头工人撰写文件:

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 可用并且 Eureka 还活着。此外,如果我再次启动 docker-compose up,这个端口将增加,并且 Eureka 可用的新端口将是 32773。因此我看到了一些架构,但我不明白如何使这个端口像 Eureka 一样稳定和正常在 8761 上没有 Docker 开始

标签: javadockerspring-cloud

解决方案


您定义一个端口范围

ports:
  - "8761-8761"

请改成

ports:
  - "8761:8761"

推荐阅读