[英]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.