首页 > 解决方案 > Java 应用程序无法获取具有静态 IP 的 docker 容器中主机的 IP 地址 anc 无法访问 PosgreSql 数据库

问题描述

我有一个由 3 个不同的 Java 服务器应用程序制作的解决方案。

这 3 个 Java 应用程序可以在 3 个不同的物理服务器上运行,也可以在同一台服务器上运行(取决于用户数量、流量等...)。他们必须访问 Postgresql 数据库。数据库可以驻留在不同的物理服务器上,也可以作为应用程序之一驻留在同一物理服务器上。

因此,可能存在数据库和 3 个 java 应用程序驻留在同一物理服务器上的情况,而在另一种情况下,它们驻留在 4 个不同的物理服务器上。

所有服务器都有静态 IP 地址。

3 个 Java 应用程序通过 Docker 容器安装,而 PostgreSql DB 则以传统方式安装(无容器)。

问题是java应用程序(通过'getLocalHost()')将容器的地址(172.0......)视为自己的地址;因为是无容器设计的,所以必须看到主机的物理地址(80.211 .....)。

此外,当 Java 应用程序访问数据库时,数据库看到访问请求来自 IP 地址 172.0...,而它应该从 80.211...接收它以允许访问。

Java 应用程序由 docker 文件运行,如下所示:

FROM openjdk:8-oraclelinux8
WORKDIR /mydir
# VOLUME . /
COPY ["./My_name_Java_app.jar", "./My_name_Java_app.properties", "./"]
EXPOSE 80
EXPOSE 8080
EXPOSE 1000-2000
ENTRYPOINT ["/bin/java", "-Djava.awt.headless=true", "-jar", "My_name_Java_app.jar"]

如何修改 dockerfile 以暴露主机 IP 地址而不是容器地址?

标签: javapostgresqldockerdockerfile

解决方案


推荐阅读