Dockerized tomcat webapp 在连接到另一个本地主机时抛出 404 异常 URL

Dockerized tomcat webapp throwing 404 exception when connecting to another localhost URL

我在 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

如何配置容器才能使其正常工作?

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

Docker 网络是一个潜在的复杂事物。基本上,如果您 运行 两个单独的容器,它们将不会 'see' 彼此。您可以让它们都在主机上公开端口,然后 'connect' 这样,但是您最好使用 docker 的网络功能来确保容器相互通信。

对于像您这样的简单示例 - 假设只有两个容器 运行ning tomcats 你想互相交谈 - 你最好只 运行 它们都通过 docker-组合,使它们在同一个网络中。

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