java maven docker jib发布端口失败

2wnc66cl  于 2023-01-01  发布在  Maven
关注(0)|答案(1)|浏览(150)

我有一个mavenized的springboot应用程序,我成功地使用GoogleContainerTools jib对接。但当我在主机上的浏览器中键入http://localhost:8080的地址时,它无法正常连接。
Maven构建中的部分

...
<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>${jib-maven-plugin.version}</version>
    <configuration>
        <to>
            <image>springboot-test</image>
        </to>
        <container>
            <ports>
                <port>8080</port>
            </ports>
            <environment>
                <spring.datasource.url>jdbc:postgresql://172.17.0.1:5432/postgres</spring.datasource.url>
                <spring.mongo.url>mongodb://172.17.0.1:27017/mongo</spring.mongo.url>
            </environment>
            <creationTime>USE_CURRENT_TIMESTAMP</creationTime>
            <format>OCI</format>
        </container>
     </configuration>
</plugin>
...

我通过maven clean compile jib:dockerBuild -f pom.xml运行安装程序。
我确实有一个postgres数据库和mongodb也连接到其他容器,它们会按照日志所述正确启动。
映像构建正确,并作为Docker Desktop上的日志所声称的容器运行。
在我的Docker桌面中检查容器时,在端口部分显示端口8080/tcpNot bound。在浏览器http://localhost:8080中访问主机系统时无法访问任何内容。

reading deeper into port exposure时,publishexpose之间存在差异。到目前为止,我得到的publish用于暴露给主机,而expose处理不同容器之间的端口访问。
例如,我不能真正理解如何精确地设置这种差异,比如让容器化的webapp(springboot-web)在端口8080上运行,并将其发布到主机系统的端口80。
我错过了什么?
(我在一台安装了Java 17的MacBook上运行所有东西)

q3qa4bjr

q3qa4bjr1#

您的maven命令构建容器,而不是运行它。
您仍然需要显式地Map端口,无论它们是否在Docker映像的构建定义中公开/发布

docker run -p 8080:8080 image

此外,您不应该将IP地址用于Docker网络中的其他服务,也不应该将它们硬编码为默认环境变量

相关问题