为什么不能在Docker-compose中连接到另一个容器中的Web应用程序?

我有一个至less有两个tomcat容器的docker撰写文件:(抬头,这不是一个有效的docker-compose,只有一个模板)

version: "3" services: restapidependencies: xxxxxx restapi: image: tomcat:8.0-jre8 depends_on: - restapidependencies ports: - "8888:80" command: catalina.sh run web: image: tomcat:8.0-jre8 depends_on: - coreservices ports: - "7777:80" command: catalina.sh run 

一个是REST风格的API,另一个是构build在JavaScript(angularJS)上的Web应用程序。 还有一些restapi依赖的其他服务,(数据库,redis等)。 其余的api使用docker-compose.yaml中定义的服务的名称成功连接到它的依赖关系,但是, web服务中的应用程序无法连接到restapi服务。 也就是说,当我将restapi docker exec放入web容器时,我可以使用curl成功地向restapi发出请求。

有没有一个JavaScript应用程序将无法连接到相同的docker组成的docker容器的情况。

PS:我没有开发运行web的应用程序,所以我对它可能做的任何特殊的知识都是有限的,我的前端开发人员给了我一个解释:“网页应用程序在浏览器中运行”,这是有道理的。 一些想法:这是否意味着Web应用程序无法访问本地主机? 即使是这样,docker compose创build了一个容器networking,所以在同一个应用程序中没有共享本地主机,从技术上来说, web正在调用一个完全不同的ip,而不是本地主机。

我把docker exec放入web容器,我可以用curl成功地向restapi发出请求

然后,您的restapi可以从您的Web容器访问。 所以它看起来像一个错误的configuration。

  • 有没有日志消息?
  • 应用程序如何尝试启动连接?
  • 也许你忘了为你的webapp定义任何环境variables?
  • 也许你的restAPI不公开任何端口?

尝试获取一个日志输出,告诉你为什么连接失败。