簡體   English   中英

無法通過IP地址訪問Docker容器

[英]Can't acces docker container by IP address

我正在開發Django應用程序,因此我決定將所有開發人員移至Docker容器中。 我有一個小問題:基本上,我有3個容器:-應用程序(保存django代碼)-postgres(保存數據庫)-網絡(網絡是nginx,將來自端口80的請求轉發到端口8000我的問題是我無法從“ app”容器外部訪問我的網站,我的nginx日志說:

2014/12/21 22:22:35 [error] 9#0: *9 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.59.3, server: _, request: "GET / HTTP/1.1", upstream: "http://172.17.0.62:8000/", host: "192.168.59.103"

因此很明顯,nginx無法轉發連接,因為“ app”容器(192.168.59.103)不監聽連接。 但這不是真的,因為我連接到應用程序容器,並嘗試發出curl請求,但是:-如果我curl "localhost:8000" ,它就可以工作(我得到了django的歡迎頁面-如果我curl "http://172.17.0.62:8000/"它不起作用因此,我curl "http://172.17.0.62:8000/"出問題並運行向我顯示的” route“命令:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.17.42.1     0.0.0.0         UG    0      0        0 eth0
172.17.0.0      *               255.255.0.0     U     0      0        0 eth0

他們,我進入boot2docker ssh並輸入“ route”,結果如下:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.0.2.2        0.0.0.0         UG    1      0        0 eth0
10.0.2.0        *               255.255.255.0   U     0      0        0 eth0
127.0.0.1       *               255.255.255.255 UH    0      0        0 lo
172.17.0.0      *               255.255.0.0     U     0      0        0 docker0
192.168.59.0    *               255.255.255.0   U     0      0        0 eth1

因此,顯然我沒有通往容器的良好路線,但這很奇怪,因為我沒有碰到它的任何配置。 有人知道嗎?

一些評論:

Web(這是一個nginx,它將來自端口80的請求轉發到8000,這是django使用的端口)

如果您僅使用nginx從80轉發到8080,為什么不使用-p 80:8080運行您的應用容器,而無需中間容器就可以達到相同的效果。

如果您希望nginx能夠與app容器通信,則在為nginx運行--link APP_CONTAINER:ALIAS時,必須使用--link APP_CONTAINER:ALIAS開關將app容器鏈接到nginx容器。 然后,您可以查看nginx容器內的/ etc / hosts以獲取ALIAS映射到的IP。 每個docker容器都從docker橋獲取自己的IP,並且需要鏈接才能進行通信。

Docker容器間通信使用iptables進行管理。 運行iptables -L來查看配置的路由。 您可能不應該手動將此操作弄亂。 鏈接容器通常可以很好地管理這些事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM