在Docker容器中build立hello-world应用程序之间的对话

我试图在Docker中运行我的hello-world应用程序:前端需要从后端使用REST。

我跑

docker run -p 1337:1337 --net=bridge me/p-dockerfile-advanced-backend:latest docker run -p 1338:1338 --net=bridge me/p-dockerfile-advanced-frontend:latest http://127.0.0.1:1337 

我可以使用来自主机操作系统(我的桌面Windows 10 x64)的浏览器连接到他们两个:

在这里输入图像说明

在这里输入图像说明

前端应用程序需要http://127.0.0.1:1337参数来知道宁静服务所在的位置。 但该应用程序无法连接到他们。 我也无法连接。

 Windows PowerShell Copyright (C) 2016 Microsoft Corporation. All rights reserved. PS C:\Users\user1> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4b0852253b8a me/p-dockerfile-advanced-frontend:latest "/usr/bin/java -ja..." 24 minutes ago Up 24 minutes 0.0.0.0:1338->1338/tcp laughing_noyce e73f8a6efa24 me/p-dockerfile-advanced-backend:latest "/usr/bin/java -ja..." 26 minutes ago Up 26 minutes youthful_chandrasekhar PS C:\Users\user1> docker exec -it 4b0852253b8a bash root@4b0852253b8a:/# apt-get install telnet <...> root@4b0852253b8a:/# telnet localhost 1337 Trying 127.0.0.1... Trying ::1... telnet: Unable to connect to remote host: Cannot assign requested address root@4b0852253b8a:/# 

无法连接,但它应该是因为我指定--net=bridge两个容器和后端监听端口1337:

 root@e73f8a6efa24:/# netstat -lntu Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:1337 0.0.0.0:* LISTEN root@e73f8a6efa24:/# 

PS:我花了几乎整整一天的时间试图让它在这里工作之前。

由于这些是不同的容器,所以你必须暴露两个端口。 运行第一个:

 docker run -p 1337:1337 --net=bridge me/p-dockerfile-advanced-backend:latest 

请注意, bridge是默认的networking,所以你是额外的。 无论如何,两个容器默认都会在同一个bridge

问题是127.0.0.1地址。

每个容器默认分配2个接口: eth0lo (带127.0.0.1地址的回送接口)。

您需要指定以前的容器的名称或地址。 对于这个简单的应用程序,您可以使用 – 链接选项。

 docker run -p 1337:1337 --name backend me/p-dockerfile-advanced-backend:latest docker run -p 1338:1338 --link backend:backend me/p-dockerfile-advanced-frontend:latest http://backend:1337 

请注意,不build议使用–link选项,如下所示: https : //docs.docker.com/engine/userguide/networking/default_network/dockerlinks/