java - 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 地址而不是容器地址?
解决方案
推荐阅读
- r - R 中有超过 500 个可能的分类结果的混淆矩阵
- python - 如何解决此错误“我的数据中的数组索引过多?”
- javascript - 在事件侦听器函数中无法访问 React hooks 值
- javascript - 如何在firebase触发事件中检索子集合项的父项
- php - 如何使用 laravel 发送签名/加密的消息?
- python - 使用嵌套循环在 Python 上创建表
- node.js - 无法使用 ts-node 和 pm2 运行 typescript node.js 应用程序
- javascript - fs.FileRead -> TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串、缓冲区或 URL 类型之一。接收类型未定义
- c++ - 比较 double* 和 double
- java - 尝试加密时出现此错误。java.security.InvalidKeyException:传递给 RSA 的未知密钥类型