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