[英]Stuck exposing a port of Docker
我被困在Docker中的端口映射上。
我想將容器外部的端口8090映射到容器內部的端口80。
這是運行的容器:
ea41c430105d tag-xx "/usr/local/openrest…" 4 minutes ago Up 4 minutes 8090/tcp, 0.0.0.0:8090->80/tcp web
請注意,它說端口8090已映射到端口80。
現在在另一個容器中
curl web
我收到401
回應。 這意味着容器會做出響應。 到現在為止還挺好。
但是當我curl web:8090
我得到:
curl: (7) Failed to connect to web port 8090: Connection refused
為什么端口映射對我不起作用?
謝謝
PS我知道我的容器特別是用401響應curl web
,因為當我停止docker stop web
並再次做curl web
時,我could not resolve host: web
。
您不能從另一個容器內部連接到已發布的端口,因為這些端口僅在主機上可用。 在您的情況下:
來自主持人:
curl localhost:8090
將連接到您的容器 curl localhost:80
將不會連接到您的容器,因為該端口未發布 從同一網絡中的另一個容器
curl web
將工作 curl web:8090
無法正常工作,因為唯一公開並監聽Web服務的端口是80。 除非指定,否則Docker容器將連接到默認橋接網絡。 此默認網橋網絡不支持容器之間的自動DNS解析。 看起來您很可能在默認網橋網絡上。 但是,在默認網橋網絡上,您可以使用容器IP地址進行連接,可以使用以下命令找到該容器
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container name>
因此, curl <IP Address of web container>:8090
應該可以工作。
創建用戶定義的橋接網絡並將容器附加到該網絡總是更好。 在用戶定義的網橋網絡上,連接的容器的端口彼此暴露,而不是暴露於外界。 用戶定義的網橋網絡還支持自動DNS解析,您可以引用容器的名稱而不是IP地址。 您可以嘗試使用以下命令來創建用戶定義的網橋網絡並將其附加到容器。
docker network create --driver bridge my-net
docker attach web
docker attach <other container name>
現在,從另一個容器中,您應該可以在“ Web”容器上運行curl。
您可以創建網絡以在容器之間進行連接。 或者您可以使用--link:
docker運行--name container1 -p 80:???? -d圖像(暴露在端口80上)
docker run --name container2 --links lcontainer1:container1
在container2內,您可以使用:
卷曲lcontainer1
希望能幫助到你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.