2017-12-27 3608 views
0

我試圖在Docker中運行我的hello-world應用程序:前端需要從後端使用REST。在Docker容器中建立hello-world應用程序之間的對話

我跑

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 64):

enter image description here

enter image description here

前端應用程序需要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 
[email protected]:/# apt-get install telnet 
<...> 
[email protected]:/# telnet localhost 1337 
Trying 127.0.0.1... 
Trying ::1... 
telnet: Unable to connect to remote host: Cannot assign requested address 
[email protected]:/# 

無法連接,但它應該是因爲我指定的兩個容器--net=bridge和後臺偵聽的端口1337:

[email protected]:/# 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 
[email protected]:/# 

PS:我花了幾乎一整天試圖使它詢問這裏工作之前。

回答

1

問題是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 

注意,如在規定的--link選項已過時: https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/

0

由於這些是不同的容器,因此您必須在兩者上公開端口。運行第一個:

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

請注意bridge是默認網絡,因此您是額外的。無論如何,這兩個容器默認都會在同一個bridge網絡中。

+0

沒有幫助。現在,我可以從主機操作系統訪問第一個(後端)容器,但從第二個容器訪問它之前不可用。我爲這個問題添加了截圖。 – ieXcept

相關問題