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

2020年11月19日 51点热度 0条评论

我有来自Spring Cloud的Eureka在docker容器中启动。这是我用于构建和公开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

这是我的docker compose文件:

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,则该端口将增加,而Eureka将可用的新端口将是32773。因此,我看到了一些模式,但我不了解如何使该端口稳定和常规,因为Eureka一直以来在8761上没有Docker开始

解决方案如下:

您使用以下命令定义端口范围

ports:
  - "8761-8761"

请更改为

ports:
  - "8761:8761"