我有一个 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/