从一个docker集装箱到另一个的REST请求失败

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

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

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

当我在Docker容器外部testing应用程序B时(换句话说,在docker化之前),应用程序B成功地执行所有RESTful请求并且接收响应没有问题。

不幸的是,当我在容器中dockerize和运行应用程序B时:

 docker run -p 8081:8081 --name AppB image2 

每当我尝试发送一个RESTful请求到应用程序A,我得到以下内容:

 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应用程序完美地通信,一旦它自身被docker化,就无法与同一个dockerized应用程序进行通信?

有人请指教…

简单地将B链接到docker run -p 8081:8081 --link AppA --name AppB image2 ,然后可以使用AppA:8080访问REST服务。

原因是Docker容器在自己的子网上运行(通常为172.17.0.0-255),并且无法访问主机所在的networking。 localhost也将是容器本身,而不是主机。