角度Java应用程序的Docker:端口未正确公开

角度Java应用程序的Docker:端口未正确公开,java,angular,docker,maven,port,Java,Angular,Docker,Maven,Port,我正在尝试将一个全栈Java(Springboot)-Angular应用程序对接。Angular应用程序嵌入到应用程序中,并以GET-localhost:8080/getSomeInfo的形式对Java应用程序进行REST调用。我的Dockerfile是 FROM maven:3.6.3-openjdk-8 AS build COPY src /home/app/src COPY pom.xml /home/app RUN mvn -f /home/app/pom.xml clean packa

我正在尝试将一个全栈Java(Springboot)-Angular应用程序对接。Angular应用程序嵌入到应用程序中,并以GET-localhost:8080/getSomeInfo的形式对Java应用程序进行REST调用。我的Dockerfile是

FROM maven:3.6.3-openjdk-8 AS build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean package

FROM openjdk:8-jdk-alpine
COPY --from=build /home/app/target/*.jar /usr/local/lib/app.jar
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} /usr/local/lib/app.jar
ENTRYPOINT ["java","-jar","/usr/local/lib/app.jar"]

FROM node:12.2.0
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY src/main/web/package.json /app/package.json
RUN npm install
RUN npm install -g @angular/cli@10.1.2
COPY src/main/web /app
CMD ng serve --host 0.0.0.0
我把它建成 docker构建-t springio/myapp

我需要公开angular端口和java端口,所以我将其作为 docker run-P9898:4200-P8080:8080-t springio/myapp

我可以打开网页,但它无法连接到Java服务器(无法连接到8080)。请问这是怎么修的


我曾尝试将“EXPOSE 8080”放在dockerfile中,但没有成功

您不应该将两个应用程序放在同一个容器中。虽然可以,但这被认为是一种不好的做法,它违背了使用容器的目的

我建议使用2个Dockerfile:一个用于后端(java应用程序),一个用于前端(Angular应用程序)。分别构建它们,并独立启动它们

对于您的特定问题,我不认为端口是问题所在,但Java应用程序甚至还没有启动(它实际上甚至没有出现在最终图像中)。拆分Dockerfile并分别启动应用程序将解决您的问题


EXPOSE
实际上什么都不做。它用于通知Dockerfile用户应用程序正在侦听哪些端口,以便用户知道在主机上映射哪些端口。

此处创建的最终图像是angular应用程序的节点,spring构建被保留,这是一个中间图像。