簡體   English   中英

無法從外部機器訪問公開暴露的Docker容器端口,只能從localhost訪問?

[英]Can't access publicly exposed Docker container port from external machine, only from localhost?

我在我的Ubuntu Linux 14.04計算機上運行了一個Docker容器,公開了一個端口:

docker run --name spacyapi -d -p 127.0.0.1:7091:7091 jgontrum/spacyapi:en

我可以連接並執行容器中服務器的命令,而不會出現本地機器的問題。 例如:

curl http://localhost:7091/api --header 'content-type: application/json' --data '{"text": "This is a test."}' -X POST

該命令忠實執行。 但是,如果我從外部機器嘗試相同的CURL命令,我會收到“連接被拒絕”錯誤:

curl http://192.5.169.50:5000/api --header 'content-type: application/json' --data '{"text": "This is a test."}' -X POST
curl: (7) Failed to connect to 192.5.169.50 port 7091: Connection refused

其中192.5.169.50是運行Docker容器的框的IP地址。

我認為我不需要任何iptables規則,因為我不需要在同一個盒子上運行Node.JS服務器。 我本地網絡上的所有其他計算機都可以正常訪問Node.JS服務器。 但不是Docker容器充當服務器。

我怎樣才能解決這個問題?

您沒有使用此標志公開發布您的端口:

-p 127.0.0.1:7091:7091

該標志表示要在主機127.0.0.1接口(localhost),端口7091上發布到容器端口7091.到達該端口的唯一方法是在主機上並連接到環回接口。

要公開發布端口,請從該標志中刪除IP:

-p 7091:7091

或顯式發布到所有接口:

-p 0.0.0.0:7091:7091

后一種格式與第一種格式相同,只要您沒有使用dockerd --ip xxxx覆蓋dockerd --ip xxxx守護程序設置或在/etc/docker/daemon.json文件中設置ip值。

我不認為容器的IP是192.5.169.50。 嘗試做docker inspect <container-uid> | grep IPAddress docker inspect <container-uid> | grep IPAddress來檢查容器的IP是什么。 我相信它應該像172.17.0.X。

你也可以做docker run -d --network=host <image> ,它將容器堆疊在主機網絡之上。

容器只是主機上的東西,主機是實際與外部通信的主機。

暫無
暫無

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

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