从一个 docker 容器到另一个容器的 REST 请求失败

标签 rest docker docker-machine

我有两个应用程序,其中一个具有另一个使用的 RESTful 接口(interface)。两者都在同一台机器上运行。

应用程序 A 在 docker 容器中运行。我正在使用命令行运行它:

docker run -p 40000:8080 --name AppA image1

当我在 docker 容器外测试应用程序 B 时(换句话说,在它被 dockerized 之前)应用程序 B 成功执行所有 RESTful 请求并毫无问题地接收响应。

不幸的是,当我在容器中 dockerize 并运行应用程序 B 时:
docker run -p 8081:8081 --name AppB image2

每当我尝试向应用程序 A 发送 RESTful 请求时,我都会得到以下信息:
Connect to localhost:40000 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused

当然,我也尝试过使用我机器的 IP 地址连接应用程序 B。当我这样做时,我得到以下失败:
Connect to 192.168.1.101:40000 failed: No route to Host

有没有人见过这种行为?是什么导致一个应用程序与 docker 容器外的另一个 dockerized 应用程序通信完美,一旦它本身被 dockerized 就无法与同一个 dockerized 应用程序通信?

有人请指教...

最佳答案

只需将 B 链接到 A docker run -p 8081:8081 --link AppA --name AppB image2 ,然后您可以使用 AppA:8080 访问 REST 服务.

原因是 Docker 容器在其自己的子网(通常为 172.17.0.0-255)上运行,它们无法访问您的主机所在的网络。还有localhost将是容器本身,而不是主机。

关于从一个 docker 容器到另一个容器的 REST 请求失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36731814/

相关文章:

Docker 正在大量使用,但没有任何 Docker 容器

api - 通过 REST api 管理用户身份验证的正确方法?

java - 运行 Linkedin 的 Rest.li 示例

rest - grails休息渲染并返回

linux - Alpine Linux 3.7 上的 Docker 容器 : Strange pid 1 not visible within the container's pid namespace

c - Docker容器无法连接到Redis

java - 用于文件上传和 JSON 数据的 Rest 服务 Java

docker - 如何模拟 Docker 容器失去互联网连接?

node.js - 如何使用 Express + Docker + Azure 映射端口

windows - docker : Hyper-V was unable to find a virtual switch with name "DockerNAT"