javascript - 为什么 docker-compose 中的 Web 应用程序无法连接到同一组合中的另一个容器?

标签 javascript angularjs tomcat docker docker-compose

我有一个 docker compose 文件,其中至少有 2 个 tomcat 容器: (注意,这不是一个有效的 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

一个是 RESTful api,另一个是基于 javascript (angularJS) 构建的 Web 应用程序。 restapi 还依赖 X 个其他服务(数据库、redis 等)。 Rest api 使用 docker-compose.yaml 中定义的服务名称成功连接到其依赖项,但是 web 服务内的应用程序无法连接到 restapi 服务。也就是说,当我使用 docker exec 进入 web 容器时,我可以使用 curl 成功向 restapi 发出请求。 .

是否存在已知的场景,JavaScript 应用程序无法连接到同一 docker-compose 中的 docker 容器。

PS:我没有开发运行 web 的应用程序,因此我对其可能执行的任何特殊操作的了解有限,我的前端开发人员给了我这样的解释:“Web 应用程序是在浏览器内部运行”,这是有道理的。 一些想法:这是否意味着网络应用程序也无法访问本地主机?即使是这种情况,docker compose 也会创建一个容器网络,因此在同一个应用程序中不会共享 localhost,从技术上讲,web 正在调用完全不同的 ip,而不是 localhost。

最佳答案

我通过 docker exec 进入 Web 容器,我可以使用curl 成功向restapi 发出请求

然后您的restapi可以从您的网络容器访问。所以看起来配置错误。

  • 有任何日志消息吗?
  • 应用如何尝试建立连接?
  • 也许您忘记为您的网络应用定义任何环境变量?
  • 也许您的其余 API 没有公开任何端口?

尝试获取日志输出,告诉您连接失败的原因。

关于javascript - 为什么 docker-compose 中的 Web 应用程序无法连接到同一组合中的另一个容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47062359/

相关文章:

javascript - 在子指令中访问父指令的 Controller 范围变量

javascript - 遍历数组以在 Javascript 中创建对象

javascript - Angular 指令修改范围,但不在 setTimeout 之后

tomcat 7 忽略了我的 context.xml

Java Spring Boot - spring-boot-starter-tomcat 依赖项不适用于在本地运行时提供的范围

java - 如何在 servlet 之间共享 java AsyncContext?

javascript - 在部分 View MVC 中使用 jquery/js

javascript - 将 document.domain 动态设置为 iframe

forms - 触发 Angular Form 提交中所有字段的验证

javascript - 是否可以使用 Angular 获取元素的内部 HTML?