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

时间:2019-04-30 08:32:30

标签: java docker spring-cloud

我从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

这是我的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

2 个答案:

答案 0 :(得分:3)

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

ports:
  - "8761-8761"

请更改为

ports:
  - "8761:8761"

答案 1 :(得分:0)

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

但是我看到更多的要点。

据我所知,尤里卡的默认端口是1111。 您是否暴露了正确的端口?

此外,将eureka与docker结合使用时要格外小心。 他们可能会通过localhost或内部IP地址注册自己。 Docker容器,其他Docker容器可能无法提供。

考虑一下以下应用程序比例(或环境变量):

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