从一个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
也将是容器本身,而不是主机。