我有一个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/tcp
为Not bound
。在浏览器http://localhost:8080
中访问主机系统时无法访问任何内容。
当reading deeper into port exposure时,publish
和expose
之间存在差异。到目前为止,我得到的publish
用于暴露给主机,而expose
处理不同容器之间的端口访问。
例如,我不能真正理解如何精确地设置这种差异,比如让容器化的webapp(springboot-web)在端口8080上运行,并将其发布到主机系统的端口80。
我错过了什么?
(我在一台安装了Java 17的MacBook上运行所有东西)
1条答案
按热度按时间q3qa4bjr1#
您的maven命令构建容器,而不是运行它。
您仍然需要显式地Map端口,无论它们是否在Docker映像的构建定义中公开/发布
此外,您不应该将IP地址用于Docker网络中的其他服务,也不应该将它们硬编码为默认环境变量