我想在Google Cloud Platform(GCP)的Google Compute Engine(GCE)上部署我的spring-boot应用程序。我明白,当将容器分发到主机时,我必须将容器中的端口映射到主机中的端口通过以下命令:
docker run -it -p 8080:8080 spring-app
然而,当我没有做docker容器端口映射时,为什么我可以访问基于容器优化的os的GCE?
这是我在spring-boot应用程序中的Dockerfile。(iampotato是我的项目名称):
FROM adoptopenjdk/openjdk11:latest AS TEMP_BUILD_IMAGE
ENV APP_HOME=/usr/app/
WORKDIR $APP_HOME
COPY build.gradle settings.gradle gradlew $APP_HOME/
COPY gradle $APP_HOME/gradle/
RUN ./gradlew -x test --info || return 0
COPY . .
RUN ./gradlew -x test build
FROM adoptopenjdk/openjdk11:latest
ENV ARTIFACT_NAME=iampotato.jar
ENV APP_HOME=/usr/app/
WORKDIR $APP_HOME
COPY --from=TEMP_BUILD_IMAGE $APP_HOME/build/libs/$ARTIFACT_NAME .
EXPOSE 8080
ENTRYPOINT java -Dspring.profiles.active=dev -jar $ARTIFACT_NAME
下面是期望的结果:
- 我认为我不应该能够访问spring-boot应用程序,因为我没有做容器端口映射。
这个设置端口映射在docker上的容器优化的操作系统是相关的,但它并没有回答我的问题,为什么我不需要在基于容器优化的操作系统的GCE上做端口映射。
这是我的环境:
- Spring Boot 2.7.9
- OpenJDK 11
- 基于容器优化操作系统的GCE
- 码头工人20.10.12
容器端口与主机虚拟机端口一一对应。为例如,容器端口80映射到主机虚拟机端口80。计算引擎不支持端口发布(-p)标志,您也不支持必须指定它才能使映射工作。
发布容器端口
注意:这适用于容器优化的操作系统,而不是运行在普通计算引擎上的Docker。