首页 > 解决方案 > 连接到另一个本地主机 URL 时,Dockerized tomcat webapp 抛出 404 异常

问题描述

我有一个在 docker 容器中的 tomcat 8.5 中运行的应用程序。Java 版本是 jdk 8。应用程序使用的属性文件指向另一个正在运行的服务。在这种情况下,我的主机上运行了该服务,并且该属性设置为指向我的本地主机:

my.external.service.url=http://localhost:8080/my-api-service

当我的 tomcat 应用程序也在主机上运行时,这可以正常工作。但是当我的应用程序在 docker 容器中运行时,当它尝试调用此服务时出现 404 错误。

我尝试切换 URL 以指向我的机器名称:

my.external.service.url=http://my.pc.url.com:8080/my-api-service

但是在这种情况下,即使如果 tomcat 应用程序在主机而不是 docker 容器上运行它仍然可以工作,我会得到一个不同的错误:

java.net.UnknownHostException: my.pc.url.com: No address associated with hostname

如何配置容器以便我可以让它工作?

标签: javadockertomcat

解决方案


查看您收到的特定错误No address associated with the hostname- 这意味着它无法将主机名解析为 IP。因此,您可以找到本地主机 IP,然后将参数传递给 docker run 命令以将该主机添加到容器查找中。例如:-add-host="my.pc.url.com:X.X.X.X"

Docker 网络是一个潜在的复杂事物。基本上,如果您运行两个单独的容器,它们将不会“看到”彼此。您可以让它们都暴露主机上的端口,然后以这种方式“连接”,但您最好使用 docker 的网络功能来确保容器相互通信。

对于像您这样的简单示例 - 比如说只有两个运行您想相互交谈的 tomcat 的容器 - 您最好通过 docker-compose 运行它们,以便它们在同一个网络中。

如果您想探索,互联网上有许多资源可以解释 docker 网络的更多细节。


推荐阅读